/** @file\r
Helper functions for configuring or getting the parameters relating to iSCSI.\r
\r
-Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.<BR>\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
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
#include "IScsiImpl.h"\r
\r
CHAR16 mVendorStorageName[] = L"ISCSI_CONFIG_IFR_NVDATA";\r
-BOOLEAN mIScsiDeviceListUpdated = FALSE;\r
-UINTN mNumberOfIScsiDevices = 0;\r
ISCSI_FORM_CALLBACK_INFO *mCallbackInfo = NULL;\r
\r
HII_VENDOR_DEVICE_PATH mIScsiHiiVendorDevicePath = {\r
{\r
END_DEVICE_PATH_TYPE,\r
END_ENTIRE_DEVICE_PATH_SUBTYPE,\r
- { \r
+ {\r
(UINT8) (END_DEVICE_PATH_LENGTH),\r
(UINT8) ((END_DEVICE_PATH_LENGTH) >> 8)\r
}\r
\r
IsIdStr = (CHAR16 *) String;\r
\r
- if (StrLen (IsIdStr) != 6) {\r
+ if (StrLen (IsIdStr) != 6 && StrLen (IsIdStr) != 12) {\r
UnicodeSPrint (\r
PortString,\r
(UINTN) ISCSI_NAME_IFR_MAX_SIZE,\r
- L"Error! Input is incorrect, please input 6 hex numbers!\n"\r
+ L"Error! Only last 3 bytes are configurable, please input 6 hex numbers for last 3 bytes only or 12 hex numbers for full SSID!\n"\r
);\r
\r
CreatePopUp (\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
+ if (StrLen (IsIdStr) == 12) {\r
+ IsIdStr += 6;\r
+ }\r
+\r
for (Index = 3; Index < 6; Index++) {\r
CopyMem (TempStr, IsIdStr, sizeof (TempStr));\r
TempStr[2] = L'\0';\r
@param[in] String The string is "&OFFSET=".\r
@param[out] Value The Offset value.\r
\r
- @retval EFI_OUT_OF_RESOURCES Insufficient resources to store neccessary\r
+ @retval EFI_OUT_OF_RESOURCES Insufficient resources to store necessary\r
structures.\r
@retval EFI_SUCCESS Value of <Number> is outputted in Number\r
successfully.\r
IScsiIpToStr (&Ip, FALSE, IfrNvData->SubnetMask);\r
CopyMem (&Ip.v4, &SessionConfigData->Gateway, sizeof (EFI_IPv4_ADDRESS));\r
IScsiIpToStr (&Ip, FALSE, IfrNvData->Gateway);\r
+ ZeroMem (IfrNvData->TargetIp, sizeof (IfrNvData->TargetIp));\r
if (SessionConfigData->TargetIp.v4.Addr[0] != '\0') {\r
CopyMem (&Ip.v4, &SessionConfigData->TargetIp, sizeof (EFI_IPv4_ADDRESS));\r
IScsiIpToStr (&Ip, FALSE, IfrNvData->TargetIp);\r
ISCSI_SESSION_CONFIG_NVDATA *SessionConfigData;\r
ISCSI_CHAP_AUTH_CONFIG_NVDATA *AuthConfigData;\r
CHAR16 AttemptNameList[ATTEMPT_NAME_LIST_SIZE];\r
+ ISCSI_NIC_INFO *NicInfo;\r
+ CHAR16 MacString[ISCSI_MAX_MAC_STRING_LEN];\r
EFI_IP_ADDRESS Ip;\r
UINTN Index;\r
+ UINTN StringLen;\r
\r
+ NicInfo = NULL;\r
ZeroMem (AttemptNameList, sizeof (AttemptNameList));\r
\r
- NET_LIST_FOR_EACH (Entry, &mPrivate->AttemptConfigs) {\r
- Attempt = NET_LIST_USER_STRUCT (Entry, ISCSI_ATTEMPT_CONFIG_NVDATA, Link);\r
- //\r
- // Normal session configuration parameters.\r
- //\r
- SessionConfigData = &Attempt->SessionConfigData;\r
-\r
- Index = Attempt->AttemptConfigIndex - 1;\r
+ if ((mPrivate != NULL) && (mPrivate->AttemptCount != 0)) {\r
+ NET_LIST_FOR_EACH (Entry, &mPrivate->AttemptConfigs) {\r
+ Attempt = NET_LIST_USER_STRUCT (Entry, ISCSI_ATTEMPT_CONFIG_NVDATA, Link);\r
+ //\r
+ // Normal session configuration parameters.\r
+ //\r
+ SessionConfigData = &Attempt->SessionConfigData;\r
\r
- //\r
- // Save the attempt to AttemptNameList as Attempt:1 Attempt:2\r
- //\r
- AsciiStrToUnicodeStrS (\r
- Attempt->AttemptName,\r
- AttemptNameList + StrLen (AttemptNameList),\r
- ATTEMPT_NAME_LIST_SIZE\r
- );\r
- *(AttemptNameList + StrLen (AttemptNameList) - 2) = L':';\r
- *(AttemptNameList + StrLen (AttemptNameList)) = L' ';\r
+ ASSERT ((Attempt->AttemptConfigIndex > 0) && (Attempt->AttemptConfigIndex <= FixedPcdGet8 (PcdMaxIScsiAttemptNumber)));\r
+ Index = Attempt->AttemptConfigIndex - 1;\r
\r
- AsciiStrToUnicodeStrS (\r
- Attempt->AttemptName,\r
- IfrNvData->ISCSIAttemptName + ATTEMPT_NAME_SIZE * Index,\r
- ATTEMPT_NAME_SIZE\r
- );\r
+ //\r
+ // Save the attempt to AttemptNameList as Attempt:1 Attempt:2\r
+ //\r
+ AsciiStrToUnicodeStrS (\r
+ Attempt->AttemptName,\r
+ AttemptNameList + StrLen (AttemptNameList),\r
+ ATTEMPT_NAME_LIST_SIZE - StrLen (AttemptNameList)\r
+ );\r
\r
- IfrNvData->ISCSIBootEnableList[Index] = SessionConfigData->Enabled;\r
- IfrNvData->ISCSIIpAddressTypeList[Index] = SessionConfigData->IpMode;\r
+ StringLen = StrLen (AttemptNameList);\r
+ ASSERT (StringLen > 2);\r
+ *(AttemptNameList + StringLen - 2) = L':';\r
+ *(AttemptNameList + StringLen) = L' ';\r
\r
- IfrNvData->ISCSIInitiatorInfoViaDHCP[Index] = SessionConfigData->InitiatorInfoFromDhcp;\r
- IfrNvData->ISCSITargetInfoViaDHCP[Index] = SessionConfigData->TargetInfoFromDhcp;\r
- IfrNvData->ISCSIConnectRetry[Index] = SessionConfigData->ConnectRetryCount;\r
- IfrNvData->ISCSIConnectTimeout[Index] = SessionConfigData->ConnectTimeout;\r
- IfrNvData->ISCSITargetTcpPort[Index] = SessionConfigData->TargetPort;\r
+ AsciiStrToUnicodeStrS (\r
+ Attempt->AttemptName,\r
+ IfrNvData->ISCSIAttemptName + ATTEMPT_NAME_SIZE * Index,\r
+ ATTEMPT_NAME_LIST_SIZE - ATTEMPT_NAME_SIZE * Index\r
+ );\r
\r
- if (SessionConfigData->IpMode == IP_MODE_IP4) {\r
- CopyMem (&Ip.v4, &SessionConfigData->LocalIp, sizeof (EFI_IPv4_ADDRESS));\r
- IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorIpAddress);\r
- CopyMem (&Ip.v4, &SessionConfigData->SubnetMask, sizeof (EFI_IPv4_ADDRESS));\r
- IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorNetmask);\r
- CopyMem (&Ip.v4, &SessionConfigData->Gateway, sizeof (EFI_IPv4_ADDRESS));\r
- IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorGateway);\r
- if (SessionConfigData->TargetIp.v4.Addr[0] != '\0') {\r
- CopyMem (&Ip.v4, &SessionConfigData->TargetIp, sizeof (EFI_IPv4_ADDRESS));\r
- IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSITargetIpAddress);\r
- }\r
- } else if (SessionConfigData->IpMode == IP_MODE_IP6) {\r
- ZeroMem (IfrNvData->Keyword[Index].ISCSITargetIpAddress, sizeof (IfrNvData->TargetIp));\r
- if (SessionConfigData->TargetIp.v6.Addr[0] != '\0') {\r
- IP6_COPY_ADDRESS (&Ip.v6, &SessionConfigData->TargetIp);\r
- IScsiIpToStr (&Ip, TRUE, IfrNvData->Keyword[Index].ISCSITargetIpAddress);\r
+ IfrNvData->ISCSIBootEnableList[Index] = SessionConfigData->Enabled;\r
+ IfrNvData->ISCSIIpAddressTypeList[Index] = SessionConfigData->IpMode;\r
+\r
+ IfrNvData->ISCSIInitiatorInfoViaDHCP[Index] = SessionConfigData->InitiatorInfoFromDhcp;\r
+ IfrNvData->ISCSITargetInfoViaDHCP[Index] = SessionConfigData->TargetInfoFromDhcp;\r
+ IfrNvData->ISCSIConnectRetry[Index] = SessionConfigData->ConnectRetryCount;\r
+ IfrNvData->ISCSIConnectTimeout[Index] = SessionConfigData->ConnectTimeout;\r
+ IfrNvData->ISCSITargetTcpPort[Index] = SessionConfigData->TargetPort;\r
+\r
+ if (SessionConfigData->IpMode == IP_MODE_IP4) {\r
+ CopyMem (&Ip.v4, &SessionConfigData->LocalIp, sizeof (EFI_IPv4_ADDRESS));\r
+ IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorIpAddress);\r
+ CopyMem (&Ip.v4, &SessionConfigData->SubnetMask, sizeof (EFI_IPv4_ADDRESS));\r
+ IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorNetmask);\r
+ CopyMem (&Ip.v4, &SessionConfigData->Gateway, sizeof (EFI_IPv4_ADDRESS));\r
+ IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorGateway);\r
+ if (SessionConfigData->TargetIp.v4.Addr[0] != '\0') {\r
+ CopyMem (&Ip.v4, &SessionConfigData->TargetIp, sizeof (EFI_IPv4_ADDRESS));\r
+ IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSITargetIpAddress);\r
+ }\r
+ } else if (SessionConfigData->IpMode == IP_MODE_IP6) {\r
+ ZeroMem (IfrNvData->Keyword[Index].ISCSITargetIpAddress, sizeof (IfrNvData->TargetIp));\r
+ if (SessionConfigData->TargetIp.v6.Addr[0] != '\0') {\r
+ IP6_COPY_ADDRESS (&Ip.v6, &SessionConfigData->TargetIp);\r
+ IScsiIpToStr (&Ip, TRUE, IfrNvData->Keyword[Index].ISCSITargetIpAddress);\r
+ }\r
}\r
- }\r
\r
- AsciiStrToUnicodeStrS (\r
- SessionConfigData->TargetName,\r
- IfrNvData->Keyword[Index].ISCSITargetName,\r
- ISCSI_NAME_MAX_SIZE\r
- );\r
-\r
- if (SessionConfigData->DnsMode) {\r
AsciiStrToUnicodeStrS (\r
- SessionConfigData->TargetUrl,\r
- IfrNvData->TargetIp,\r
- sizeof (IfrNvData->TargetIp) / sizeof (IfrNvData->TargetIp[0])\r
+ SessionConfigData->TargetName,\r
+ IfrNvData->Keyword[Index].ISCSITargetName,\r
+ ISCSI_NAME_MAX_SIZE\r
);\r
- }\r
\r
- IScsiLunToUnicodeStr (SessionConfigData->BootLun, IfrNvData->Keyword[Index].ISCSILun);\r
- IScsiConvertIsIdToString (IfrNvData->Keyword[Index].ISCSIIsId, SessionConfigData->IsId);\r
+ if (SessionConfigData->DnsMode) {\r
+ AsciiStrToUnicodeStrS (\r
+ SessionConfigData->TargetUrl,\r
+ IfrNvData->Keyword[Index].ISCSITargetIpAddress,\r
+ sizeof (IfrNvData->Keyword[Index].ISCSITargetIpAddress) / sizeof (IfrNvData->Keyword[Index].ISCSITargetIpAddress[0])\r
+ );\r
+ }\r
\r
- IfrNvData->ISCSIAuthenticationMethod[Index] = Attempt->AuthenticationType;\r
+ IScsiLunToUnicodeStr (SessionConfigData->BootLun, IfrNvData->Keyword[Index].ISCSILun);\r
+ IScsiConvertIsIdToString (IfrNvData->Keyword[Index].ISCSIIsId, SessionConfigData->IsId);\r
\r
- if (Attempt->AuthenticationType == ISCSI_AUTH_TYPE_CHAP) {\r
- AuthConfigData = &Attempt->AuthConfigData.CHAP;\r
- IfrNvData->ISCSIChapType[Index] = AuthConfigData->CHAPType;\r
- AsciiStrToUnicodeStrS (\r
- AuthConfigData->CHAPName,\r
- IfrNvData->Keyword[Index].ISCSIChapUsername,\r
- ISCSI_CHAP_NAME_STORAGE\r
- );\r
+ IfrNvData->ISCSIAuthenticationMethod[Index] = Attempt->AuthenticationType;\r
\r
- AsciiStrToUnicodeStrS (\r
- AuthConfigData->CHAPSecret,\r
- IfrNvData->Keyword[Index].ISCSIChapSecret,\r
- ISCSI_CHAP_SECRET_STORAGE\r
- );\r
+ if (Attempt->AuthenticationType == ISCSI_AUTH_TYPE_CHAP) {\r
+ AuthConfigData = &Attempt->AuthConfigData.CHAP;\r
+ IfrNvData->ISCSIChapType[Index] = AuthConfigData->CHAPType;\r
+ AsciiStrToUnicodeStrS (\r
+ AuthConfigData->CHAPName,\r
+ IfrNvData->Keyword[Index].ISCSIChapUsername,\r
+ ISCSI_CHAP_NAME_STORAGE\r
+ );\r
\r
- AsciiStrToUnicodeStrS (\r
- AuthConfigData->ReverseCHAPName,\r
- IfrNvData->Keyword[Index].ISCSIReverseChapUsername,\r
- ISCSI_CHAP_NAME_STORAGE\r
- );\r
+ AsciiStrToUnicodeStrS (\r
+ AuthConfigData->CHAPSecret,\r
+ IfrNvData->Keyword[Index].ISCSIChapSecret,\r
+ ISCSI_CHAP_SECRET_STORAGE\r
+ );\r
\r
- AsciiStrToUnicodeStrS (\r
- AuthConfigData->ReverseCHAPSecret,\r
- IfrNvData->Keyword[Index].ISCSIReverseChapSecret,\r
- ISCSI_CHAP_SECRET_STORAGE\r
+ AsciiStrToUnicodeStrS (\r
+ AuthConfigData->ReverseCHAPName,\r
+ IfrNvData->Keyword[Index].ISCSIReverseChapUsername,\r
+ ISCSI_CHAP_NAME_STORAGE\r
+ );\r
+\r
+ AsciiStrToUnicodeStrS (\r
+ AuthConfigData->ReverseCHAPSecret,\r
+ IfrNvData->Keyword[Index].ISCSIReverseChapSecret,\r
+ ISCSI_CHAP_SECRET_STORAGE\r
+ );\r
+ }\r
+ }\r
+ CopyMem(IfrNvData->ISCSIDisplayAttemptList, AttemptNameList, ATTEMPT_NAME_LIST_SIZE);\r
+\r
+ ZeroMem (IfrNvData->ISCSIMacAddr, sizeof (IfrNvData->ISCSIMacAddr));\r
+ NET_LIST_FOR_EACH (Entry, &mPrivate->NicInfoList) {\r
+ NicInfo = NET_LIST_USER_STRUCT (Entry, ISCSI_NIC_INFO, Link);\r
+ IScsiMacAddrToStr (\r
+ &NicInfo->PermanentAddress,\r
+ NicInfo->HwAddressSize,\r
+ NicInfo->VlanId,\r
+ MacString\r
+ );\r
+ CopyMem (\r
+ IfrNvData->ISCSIMacAddr + StrLen (IfrNvData->ISCSIMacAddr),\r
+ MacString,\r
+ StrLen (MacString) * sizeof (CHAR16)\r
);\r
+\r
+ *(IfrNvData->ISCSIMacAddr + StrLen (IfrNvData->ISCSIMacAddr)) = L'/';\r
}\r
- }\r
\r
- CopyMem(IfrNvData->ISCSIDisplayAttemptList, AttemptNameList, ATTEMPT_NAME_LIST_SIZE);\r
+ StringLen = StrLen (IfrNvData->ISCSIMacAddr);\r
+ if (StringLen > 0) {\r
+ *(IfrNvData->ISCSIMacAddr + StringLen - 1) = L'\0';\r
+ }\r
+ }\r
}\r
\r
/**\r
L"CHAP Name or CHAP Secret is invalid!",\r
NULL\r
);\r
- \r
+\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
&Key,\r
L"Reverse CHAP Name or Reverse CHAP Secret is invalid!",\r
NULL\r
- ); \r
+ );\r
return EFI_INVALID_PARAMETER;\r
}\r
}\r
if (AttemptName2 == NULL) {\r
FreePool (AttemptName1);\r
return EFI_OUT_OF_RESOURCES;\r
- } \r
+ }\r
\r
AsciiStrToUnicodeStrS (Attempt->AttemptName, AttemptName1, ATTEMPT_NAME_SIZE);\r
AsciiStrToUnicodeStrS (SameNicAttempt->AttemptName, AttemptName2, ATTEMPT_NAME_SIZE);\r
&Key,\r
mPrivate->PortString,\r
NULL\r
- ); \r
+ );\r
\r
FreePool (AttemptName1);\r
FreePool (AttemptName2);\r
ISCSI_ATTEMPT_CONFIG_NVDATA *Attempt;\r
UINT8 AttemptIndex;\r
UINT8 Index;\r
+ UINT8 ChapSecretLen;\r
+ UINT8 ReverseChapSecretLen;\r
CHAR16 *AttemptName1;\r
CHAR16 *AttemptName2;\r
ISCSI_ATTEMPT_CONFIG_NVDATA *SameNicAttempt;\r
UINT64 Lun;\r
EFI_STATUS Status;\r
\r
+ Attempt = NULL;\r
ZeroMem (IScsiName, sizeof (IScsiName));\r
\r
if (OffSet < ATTEMPT_BOOTENABLE_VAR_OFFSET) {\r
if (Attempt == NULL) {\r
return EFI_INVALID_PARAMETER;\r
}\r
- Attempt->SessionConfigData.ConnectRetryCount = IfrNvData->ISCSIConnectRetry[AttemptIndex - 1];\r
- if (Attempt->SessionConfigData.ConnectRetryCount == 0) {\r
- Attempt->SessionConfigData.ConnectRetryCount = CONNECT_MIN_RETRY;\r
+\r
+ if (IfrNvData->ISCSIConnectRetry[AttemptIndex - 1] > CONNECT_MAX_RETRY) {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"The minimum value is 0 and the maximum is 16. 0 means no retry.",\r
+ NULL\r
+ );\r
+ return EFI_INVALID_PARAMETER;\r
}\r
+ Attempt->SessionConfigData.ConnectRetryCount = IfrNvData->ISCSIConnectRetry[AttemptIndex - 1];\r
\r
} else if ((OffSet >= ATTEMPT_CONNECT_TIMEOUT_VAR_OFFSET) && (OffSet < ATTEMPT_INITIATOR_VIA_DHCP_VAR_OFFSET)) {\r
AttemptIndex = (UINT8) ((OffSet - ATTEMPT_CONNECT_TIMEOUT_VAR_OFFSET) / 2 + 1);\r
if (Attempt == NULL) {\r
return EFI_INVALID_PARAMETER;\r
}\r
+\r
+ if ((IfrNvData->ISCSIConnectTimeout[AttemptIndex - 1] < CONNECT_MIN_TIMEOUT) ||\r
+ (IfrNvData->ISCSIConnectTimeout[AttemptIndex - 1] > CONNECT_MAX_TIMEOUT)) {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"The minimum value is 100 milliseconds and the maximum is 20 seconds.",\r
+ NULL\r
+ );\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
Attempt->SessionConfigData.ConnectTimeout = IfrNvData->ISCSIConnectTimeout[AttemptIndex - 1];\r
if (Attempt->SessionConfigData.ConnectTimeout == 0) {\r
Attempt->SessionConfigData.ConnectTimeout = CONNECT_DEFAULT_TIMEOUT;\r
}\r
\r
- if (Attempt->SessionConfigData.Enabled != ISCSI_DISABLED) {\r
- if (Attempt->SessionConfigData.ConnectTimeout < CONNECT_MIN_TIMEOUT) {\r
- CreatePopUp (\r
- EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
- &Key,\r
- L"Connection Establishing Timeout is less than minimum value 100ms.",\r
- NULL\r
- );\r
- return EFI_INVALID_PARAMETER;\r
- }\r
- }\r
-\r
} else if ((OffSet >= ATTEMPT_INITIATOR_VIA_DHCP_VAR_OFFSET) && (OffSet < ATTEMPT_TARGET_VIA_DHCP_VAR_OFFSET)) {\r
AttemptIndex = (UINT8) ((OffSet - ATTEMPT_INITIATOR_VIA_DHCP_VAR_OFFSET) + 1);\r
Attempt = IScsiConfigGetAttemptByConfigIndex (AttemptIndex);\r
);\r
\r
if (Attempt->SessionConfigData.Enabled != ISCSI_DISABLED) {\r
- if (IfrNvData->CHAPName[0] == L'\0') {\r
+ if (IfrNvData->Keyword[Index].ISCSIChapUsername[0] == L'\0') {\r
CreatePopUp (\r
EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
&Key,\r
\r
} else if ((OffSet >= ATTEMPT_CHAR_SECRET_VAR_OFFSET) && (OffSet < ATTEMPT_CHAR_REVERSE_USER_NAME_VAR_OFFSET)) {\r
if (Attempt->AuthenticationType == ISCSI_AUTH_TYPE_CHAP) {\r
+ ChapSecretLen = (UINT8)StrLen (IfrNvData->Keyword[Index].ISCSIChapSecret);\r
UnicodeStrToAsciiStrS (\r
IfrNvData->Keyword[Index].ISCSIChapSecret,\r
Attempt->AuthConfigData.CHAP.CHAPSecret,\r
);\r
\r
if (Attempt->SessionConfigData.Enabled != ISCSI_DISABLED) {\r
- if (IfrNvData->CHAPSecret[0] == L'\0') {\r
+ if ((ChapSecretLen < ISCSI_CHAP_SECRET_MIN_LEN) || (ChapSecretLen > ISCSI_CHAP_SECRET_MAX_LEN)) {\r
CreatePopUp (\r
EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
&Key,\r
- L"CHAP Secret is invalid!",\r
+ L"The Chap Secret minimum length is 12 bytes and the maximum length is 16 bytes.",\r
NULL\r
);\r
return EFI_INVALID_PARAMETER;\r
ISCSI_CHAP_NAME_STORAGE\r
);\r
if (Attempt->SessionConfigData.Enabled != ISCSI_DISABLED) {\r
- if (IfrNvData->ReverseCHAPName[0] == L'\0') {\r
+ if (IfrNvData->Keyword[Index].ISCSIReverseChapUsername[0] == L'\0') {\r
CreatePopUp (\r
EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
&Key,\r
\r
} else if (OffSet >= ATTEMPT_CHAR_REVERSE_SECRET_VAR_OFFSET) {\r
if (Attempt->AuthConfigData.CHAP.CHAPType == ISCSI_CHAP_MUTUAL) {\r
+ ReverseChapSecretLen = (UINT8)StrLen (IfrNvData->Keyword[Index].ISCSIReverseChapSecret);\r
UnicodeStrToAsciiStrS (\r
IfrNvData->Keyword[Index].ISCSIReverseChapSecret,\r
Attempt->AuthConfigData.CHAP.ReverseCHAPSecret,\r
);\r
\r
if (Attempt->SessionConfigData.Enabled != ISCSI_DISABLED) {\r
- if (IfrNvData->ReverseCHAPSecret[0] == L'\0') {\r
+ if ((ReverseChapSecretLen < ISCSI_CHAP_SECRET_MIN_LEN) || (ReverseChapSecretLen > ISCSI_CHAP_SECRET_MAX_LEN)) {\r
CreatePopUp (\r
EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
&Key,\r
- L"Reverse CHAP Secret is invalid!",\r
+ L"The Reverse CHAP Secret minimum length is 12 bytes and the maximum length is 16 bytes.",\r
NULL\r
);\r
return EFI_INVALID_PARAMETER;\r
//\r
// Record the user configuration information in NVR.\r
//\r
-\r
+ ASSERT (Attempt != NULL);\r
UnicodeSPrint (mPrivate->PortString, (UINTN) ISCSI_NAME_IFR_MAX_SIZE, L"Attempt %d", Attempt->AttemptConfigIndex);\r
return gRT->SetVariable (\r
mPrivate->PortString,\r
PortTitleHelpToken = HiiSetString (mCallbackInfo->RegisteredHandle, 0, mPrivate->PortString, NULL);\r
if (PortTitleHelpToken == 0) {\r
Status = EFI_INVALID_PARAMETER;\r
- goto Exit; \r
+ goto Exit;\r
}\r
\r
HiiCreateGotoOpCode (\r
Exit:\r
HiiFreeOpCodeHandle (StartOpCodeHandle);\r
HiiFreeOpCodeHandle (EndOpCodeHandle);\r
- \r
+\r
return Status;\r
}\r
\r
/**\r
Add the attempts by keyword 'iSCSIAddAttempts', you can use this keyword with\r
value 'attempt:1 attempt:2' etc to add one or more attempts once. This is different\r
- with IScsiConfigAddAttempt function which is used to add attempt by UI configuration. \r
+ with IScsiConfigAddAttempt function which is used to add attempt by UI configuration.\r
\r
@param[in] AttemptList The new attempt List will be added.\r
\r
\r
@retval EFI_NOT_FOUND Cannot find the corresponding variable.\r
@retval EFI_SUCCESS The operation is completed successfully.\r
- @retval EFI_ABOTRED This operation is aborted cause of error\r
+ @retval EFI_ABORTED This operation is aborted cause of error\r
configuration.\r
@retval EFI_OUT_OF_RESOURCES Fail to finish the operation due to lack of\r
resources.\r
//\r
\r
AttemptConfigData = NET_LIST_USER_STRUCT (Entry, ISCSI_ATTEMPT_CONFIG_NVDATA, Link);\r
- if (AttemptConfigData == NULL) {\r
- Status = EFI_NOT_FOUND;\r
- goto Error;\r
- }\r
\r
//\r
// Remove this attempt from UI configured attempt list.\r
FORMID_DELETE_FORM, // Form ID\r
StartOpCodeHandle, // Label for where to insert opcodes\r
EndOpCodeHandle // Replace data\r
- ); \r
+ );\r
\r
HiiFreeOpCodeHandle (StartOpCodeHandle);\r
HiiFreeOpCodeHandle (EndOpCodeHandle);\r
EFI_IFR_GUID_LABEL *StartLabel;\r
VOID *EndOpCodeHandle;\r
EFI_IFR_GUID_LABEL *EndLabel;\r
- VOID *OptionsOpCodeHandle; \r
- \r
+ VOID *OptionsOpCodeHandle;\r
+\r
Status = IScsiCreateOpCode (\r
ORDER_ENTRY_LABEL,\r
&StartOpCodeHandle,\r
DYNAMIC_ORDERED_LIST_QUESTION_ID, // Question ID\r
CONFIGURATION_VARSTORE_ID, // VarStore ID\r
DYNAMIC_ORDERED_LIST_VAR_OFFSET, // Offset in Buffer Storage\r
- STRING_TOKEN (STR_ORDER_ATTEMPT_ENTRY), // Question prompt text \r
- STRING_TOKEN (STR_ORDER_ATTEMPT_ENTRY), // Question help text \r
+ STRING_TOKEN (STR_ORDER_ATTEMPT_ENTRY), // Question prompt text\r
+ STRING_TOKEN (STR_ORDER_ATTEMPT_ENTRY), // Question help text\r
0, // Question flag\r
EFI_IFR_UNIQUE_SET, // Ordered list flag, e.g. EFI_IFR_UNIQUE_SET\r
EFI_IFR_NUMERIC_SIZE_1, // Data type of Question value\r
ISCSI_MAX_ATTEMPTS_NUM, // Maximum container\r
- OptionsOpCodeHandle, // Option Opcode list \r
- NULL // Default Opcode is NULL \r
+ OptionsOpCodeHandle, // Option Opcode list\r
+ NULL // Default Opcode is NULL\r
);\r
\r
Exit:\r
FORMID_ORDER_FORM, // Form ID\r
StartOpCodeHandle, // Label for where to insert opcodes\r
EndOpCodeHandle // Replace data\r
- ); \r
+ );\r
\r
Error:\r
HiiFreeOpCodeHandle (StartOpCodeHandle);\r
- HiiFreeOpCodeHandle (EndOpCodeHandle); \r
+ HiiFreeOpCodeHandle (EndOpCodeHandle);\r
if (OptionsOpCodeHandle != NULL) {\r
HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
}\r
UINTN Index;\r
EFI_INPUT_KEY Key;\r
\r
+ AttemptConfigData = NULL;\r
//\r
// Is User creating a new attempt?\r
//\r
&AttemptConfigOrderSize\r
);\r
\r
- if (AttemptConfigOrder != NULL) {\r
-\r
- for (Index = 0; Index < AttemptConfigOrderSize / sizeof (UINT8); Index++) {\r
- UnicodeSPrint (\r
- mPrivate->PortString,\r
- (UINTN) ISCSI_NAME_IFR_MAX_SIZE,\r
- L"Attempt %d",\r
- (UINTN) AttemptConfigOrder[Index]\r
- );\r
- GetVariable2 (\r
- mPrivate->PortString,\r
- &gEfiIScsiInitiatorNameProtocolGuid,\r
- (VOID**)&AttemptConfigData,\r
- NULL\r
- );\r
- if (AttemptConfigData == NULL || AttemptConfigData->Actived == ISCSI_ACTIVE_ENABLED) {\r
- continue;\r
- }\r
+ if (AttemptConfigOrder == NULL) {\r
+ return EFI_NOT_FOUND;\r
+ }\r
\r
- break;\r
+ for (Index = 0; Index < AttemptConfigOrderSize / sizeof (UINT8); Index++) {\r
+ UnicodeSPrint (\r
+ mPrivate->PortString,\r
+ (UINTN) ISCSI_NAME_IFR_MAX_SIZE,\r
+ L"Attempt %d",\r
+ (UINTN) AttemptConfigOrder[Index]\r
+ );\r
+ GetVariable2 (\r
+ mPrivate->PortString,\r
+ &gEfiIScsiInitiatorNameProtocolGuid,\r
+ (VOID**)&AttemptConfigData,\r
+ NULL\r
+ );\r
+ if (AttemptConfigData == NULL || AttemptConfigData->Actived == ISCSI_ACTIVE_ENABLED) {\r
+ continue;\r
}\r
\r
- if (Index > PcdGet8 (PcdMaxIScsiAttemptNumber)) {\r
- CreatePopUp (\r
- EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
- &Key,\r
- L"Can not create more attempts, Please configure the PcdMaxIScsiAttemptNumber if needed!",\r
- NULL\r
- );\r
- return EFI_UNSUPPORTED;\r
- }\r
+ break;\r
+ }\r
+\r
+ if (Index > PcdGet8 (PcdMaxIScsiAttemptNumber)) {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"Can not create more attempts, Please configure the PcdMaxIScsiAttemptNumber if needed!",\r
+ NULL\r
+ );\r
+ return EFI_UNSUPPORTED;\r
}\r
\r
if (AttemptConfigOrder != NULL) {\r
MacString\r
);\r
\r
+ ASSERT (AttemptConfigData != NULL);\r
UnicodeStrToAsciiStrS (MacString, AttemptConfigData->MacString, sizeof (AttemptConfigData->MacString));\r
AttemptConfigData->NicIndex = NicIndex;\r
AttemptConfigData->Actived = ISCSI_ACTIVE_ENABLED;\r
// Generate OUI-format ISID based on MAC address.\r
//\r
CopyMem (AttemptConfigData->SessionConfigData.IsId, &NicInfo->PermanentAddress, 6);\r
- AttemptConfigData->SessionConfigData.IsId[0] = \r
+ AttemptConfigData->SessionConfigData.IsId[0] =\r
(UINT8) (AttemptConfigData->SessionConfigData.IsId[0] & 0x3F);\r
\r
//\r
ZeroMem (IfrNvData->ReverseCHAPName, sizeof (IfrNvData->ReverseCHAPName));\r
ZeroMem (IfrNvData->ReverseCHAPSecret, sizeof (IfrNvData->ReverseCHAPSecret));\r
}\r
- \r
+\r
IScsiConvertAttemptConfigDataToIfrNvData (AttemptConfigData, IfrNvData);\r
\r
//\r
\r
\r
/**\r
- \r
+\r
This function allows the caller to request the current\r
configuration for one or more named elements. The resulting\r
string is in <ConfigAltResp> format. Also, any and all alternative\r
to the most recent "&" before the first\r
failing name / value pair (or the beginning\r
of the string if the failure is in the first\r
- name / value pair) if the request was not successful. \r
+ name / value pair) if the request was not successful.\r
\r
@param[out] Results A null-terminated Unicode string in\r
<ConfigAltResp> format which has all values\r
would result in this type of\r
error. In this case, the\r
Progress parameter would be\r
- set to NULL. \r
+ set to NULL.\r
\r
@retval EFI_NOT_FOUND Routing data doesn't match any\r
known driver. Progress set to the\r
}\r
\r
//\r
- // Extract all AttemptConfigData to Keyword stroage of IfrNvData.\r
+ // Extract all AttemptConfigData to Keyword storage of IfrNvData.\r
//\r
IScsiConvertAttemptConfigDataToIfrNvDataByKeyword (IfrNvData);\r
\r
FreePool (IfrNvData);\r
return EFI_OUT_OF_RESOURCES;\r
}\r
- \r
+\r
Status = gIScsiInitiatorName.Get (&gIScsiInitiatorName, &BufferSize, InitiatorName);\r
if (EFI_ERROR (Status)) {\r
IfrNvData->InitiatorName[0] = L'\0';\r
\r
\r
/**\r
- \r
+\r
This function applies changes in a driver's configuration.\r
Input is a Configuration, which has the routing data for this\r
driver followed by name / value configuration pairs. The driver\r
@param[in] This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.\r
\r
@param[in] Configuration A null-terminated Unicode string in\r
- <ConfigString> format. \r
- \r
+ <ConfigString> format.\r
+\r
@param[out] Progress A pointer to a string filled in with the\r
offset of the most recent '&' before the\r
first failing name / value pair (or the\r
\r
@retval EFI_SUCCESS The results have been distributed or are\r
awaiting distribution.\r
- \r
+\r
@retval EFI_OUT_OF_RESOURCES Not enough memory to store the\r
parts of the results that must be\r
stored awaiting possible future\r
protocols.\r
- \r
+\r
@retval EFI_INVALID_PARAMETERS Passing in a NULL for the\r
Results parameter would result\r
in this type of error.\r
- \r
+\r
@retval EFI_NOT_FOUND Target for the specified routing data\r
was not found.\r
\r
Index2 = 0;\r
NicInfo = NULL;\r
AttemptList = NULL;\r
+ Status = EFI_SUCCESS;\r
\r
if (This == NULL || Configuration == NULL || Progress == NULL) {\r
return EFI_INVALID_PARAMETER;\r
goto Exit;\r
}\r
} else {\r
- Status = gIScsiInitiatorName.Get (&gIScsiInitiatorName, &BufferSize, InitiatorName);\r
+ Status = IScsiGetValue (Configuration, L"&OFFSET=", &OffSet);\r
if (EFI_ERROR (Status)) {\r
- CreatePopUp (\r
- EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
- &Key,\r
- L"Error: please configure iSCSI initiator name first!",\r
- NULL\r
- );\r
+ goto Exit;\r
+ }\r
+\r
+ if (OffSet >= ATTEMPT_MAC_ADDR_VAR_OFFSET) {\r
+ Status = gIScsiInitiatorName.Get (&gIScsiInitiatorName, &BufferSize, InitiatorName);\r
+ if (EFI_ERROR (Status)) {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"Error: please configure iSCSI initiator name first!",\r
+ NULL\r
+ );\r
+ goto Exit;\r
+ }\r
+ } else {\r
goto Exit;\r
}\r
\r
}\r
\r
} else {\r
- Status = IScsiGetValue (Configuration, L"&OFFSET=", &OffSet);\r
- if (EFI_ERROR (Status)) {\r
- goto Exit;\r
- }\r
Status = IScsiConvertlfrNvDataToAttemptConfigDataByKeyword (IfrNvData, OffSet);\r
if (EFI_ERROR (Status)) {\r
goto Exit;\r
\r
IScsiConfigUpdateAttempt ();\r
\r
- Status = EFI_SUCCESS;\r
-\r
Exit:\r
if (InitiatorName != NULL) {\r
FreePool (InitiatorName);\r
}\r
\r
/**\r
- \r
+\r
This function is called to provide results data to the driver.\r
This data consists of a unique key that is used to identify\r
which data is either being passed back or being asked for.\r
@param[in] Action Specifies the type of action taken by the browser.\r
@param[in] QuestionId A unique value which is sent to the original\r
exporting driver so that it can identify the type\r
- of data to expect. The format of the data tends to \r
+ of data to expect. The format of the data tends to\r
vary based on the opcode that generated the callback.\r
@param[in] Type The type of value for the question.\r
@param[in, out] Value A pointer to the data being sent to the original\r
ISCSI_CONFIG_IFR_NVDATA OldIfrNvData;\r
EFI_STATUS Status;\r
EFI_INPUT_KEY Key;\r
+ ISCSI_NIC_INFO *NicInfo;\r
+\r
+ NicInfo = NULL;\r
\r
if ((Action == EFI_BROWSER_ACTION_FORM_OPEN) || (Action == EFI_BROWSER_ACTION_FORM_CLOSE)) {\r
//\r
}\r
\r
Private = ISCSI_FORM_CALLBACK_INFO_FROM_FORM_CALLBACK (This);\r
- \r
+\r
//\r
// Retrieve uncommitted data from Browser\r
//\r
- \r
+\r
BufferSize = sizeof (ISCSI_CONFIG_IFR_NVDATA);\r
IfrNvData = AllocateZeroPool (BufferSize);\r
if (IfrNvData == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
- \r
+\r
IScsiName = (CHAR8 *) AllocateZeroPool (ISCSI_NAME_MAX_SIZE);\r
if (IScsiName == NULL) {\r
FreePool (IfrNvData);\r
return EFI_OUT_OF_RESOURCES;\r
}\r
- \r
+\r
Status = EFI_SUCCESS;\r
- \r
+\r
ZeroMem (&OldIfrNvData, BufferSize);\r
- \r
+\r
HiiGetBrowserData (NULL, NULL, BufferSize, (UINT8 *) IfrNvData);\r
- \r
+\r
CopyMem (&OldIfrNvData, IfrNvData, BufferSize);\r
\r
if (Action == EFI_BROWSER_ACTION_CHANGING) {\r
&Key,\r
L"Error: please configure iSCSI initiator name first!",\r
NULL\r
- ); \r
+ );\r
break;\r
}\r
- \r
+\r
Status = IScsiConfigAddAttempt ();\r
break;\r
\r
);\r
IScsiConfigDisplayOrderAttempts ();\r
break;\r
- \r
+\r
default:\r
Status = IScsiConfigProcessDefault (QuestionId, IfrNvData);\r
break;\r
}\r
- } else if (Action == EFI_BROWSER_ACTION_CHANGED) { \r
+ } else if (Action == EFI_BROWSER_ACTION_CHANGED) {\r
switch (QuestionId) {\r
case KEY_INITIATOR_NAME:\r
UnicodeStrToAsciiStrS (IfrNvData->InitiatorName, IScsiName, ISCSI_NAME_MAX_SIZE);\r
&Key,\r
L"Invalid iSCSI Name!",\r
NULL\r
- ); \r
+ );\r
}\r
\r
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_APPLY;\r
break;\r
- \r
+\r
case KEY_SAVE_ATTEMPT_CONFIG:\r
Status = IScsiConvertIfrNvDataToAttemptConfigData (IfrNvData, Private->Current);\r
if (EFI_ERROR (Status)) {\r
case KEY_IP_MODE:\r
switch (Value->u8) {\r
case IP_MODE_IP6:\r
+ NicInfo = IScsiGetNicInfoByIndex (Private->Current->NicIndex);\r
+ if(NicInfo == NULL) {\r
+ break;\r
+ }\r
+\r
+ if(!NicInfo->Ipv6Available) {\r
+ //\r
+ // Current NIC doesn't Support IPv6, hence use IPv4.\r
+ //\r
+ IfrNvData->IpMode = IP_MODE_IP4;\r
+\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"Current NIC doesn't Support IPv6!",\r
+ NULL\r
+ );\r
+ }\r
+\r
case IP_MODE_IP4:\r
+ ZeroMem (IfrNvData->LocalIp, sizeof (IfrNvData->LocalIp));\r
+ ZeroMem (IfrNvData->SubnetMask, sizeof (IfrNvData->SubnetMask));\r
+ ZeroMem (IfrNvData->Gateway, sizeof (IfrNvData->Gateway));\r
ZeroMem (IfrNvData->TargetIp, sizeof (IfrNvData->TargetIp));\r
Private->Current->AutoConfigureMode = 0;\r
+ ZeroMem (&Private->Current->SessionConfigData.LocalIp, sizeof (EFI_IP_ADDRESS));\r
+ ZeroMem (&Private->Current->SessionConfigData.SubnetMask, sizeof (EFI_IPv4_ADDRESS));\r
+ ZeroMem (&Private->Current->SessionConfigData.Gateway, sizeof (EFI_IP_ADDRESS));\r
+ ZeroMem (&Private->Current->SessionConfigData.TargetIp, sizeof (EFI_IP_ADDRESS));\r
\r
break;\r
}\r
\r
case KEY_LOCAL_IP:\r
Status = NetLibStrToIp4 (IfrNvData->LocalIp, &HostIp.v4);\r
- if (EFI_ERROR (Status) || \r
- ((Private->Current->SessionConfigData.SubnetMask.Addr[0] != 0) && \r
+ if (EFI_ERROR (Status) ||\r
+ ((Private->Current->SessionConfigData.SubnetMask.Addr[0] != 0) &&\r
!NetIp4IsUnicast (NTOHL (HostIp.Addr[0]), NTOHL(*(UINT32*)Private->Current->SessionConfigData.SubnetMask.Addr)))) {\r
CreatePopUp (\r
EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
&Key,\r
L"Invalid IP address!",\r
NULL\r
- ); \r
- \r
+ );\r
+\r
Status = EFI_INVALID_PARAMETER;\r
} else {\r
CopyMem (&Private->Current->SessionConfigData.LocalIp, &HostIp.v4, sizeof (HostIp.v4));\r
&Key,\r
L"Invalid Subnet Mask!",\r
NULL\r
- ); \r
- \r
+ );\r
+\r
Status = EFI_INVALID_PARAMETER;\r
} else {\r
CopyMem (&Private->Current->SessionConfigData.SubnetMask, &SubnetMask.v4, sizeof (SubnetMask.v4));\r
\r
case KEY_GATE_WAY:\r
Status = NetLibStrToIp4 (IfrNvData->Gateway, &Gateway.v4);\r
- if (EFI_ERROR (Status) || \r
- ((Gateway.Addr[0] != 0) && \r
- (Private->Current->SessionConfigData.SubnetMask.Addr[0] != 0) && \r
+ if (EFI_ERROR (Status) ||\r
+ ((Gateway.Addr[0] != 0) &&\r
+ (Private->Current->SessionConfigData.SubnetMask.Addr[0] != 0) &&\r
!NetIp4IsUnicast (NTOHL (Gateway.Addr[0]), NTOHL(*(UINT32*)Private->Current->SessionConfigData.SubnetMask.Addr)))) {\r
CreatePopUp (\r
EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
&Key,\r
L"Invalid Gateway!",\r
NULL\r
- ); \r
+ );\r
Status = EFI_INVALID_PARAMETER;\r
} else {\r
CopyMem (&Private->Current->SessionConfigData.Gateway, &Gateway.v4, sizeof (Gateway.v4));\r
&Key,\r
L"Invalid LUN string!",\r
NULL\r
- ); \r
+ );\r
} else {\r
CopyMem (Private->Current->SessionConfigData.BootLun, &Lun, sizeof (Lun));\r
}\r
NULL\r
);\r
ASSERT_EFI_ERROR (Status);\r
- \r
+\r
//\r
// Publish our HII data.\r
//\r
);\r
if (CallbackInfo->RegisteredHandle == NULL) {\r
gBS->UninstallMultipleProtocolInterfaces (\r
- &CallbackInfo->DriverHandle,\r
+ CallbackInfo->DriverHandle,\r
&gEfiDevicePathProtocolGuid,\r
&mIScsiHiiVendorDevicePath,\r
&gEfiHiiConfigAccessProtocolGuid,\r