+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ mPrivate->PortString,\r
+ NULL\r
+ );\r
+\r
+ FreePool (AttemptName1);\r
+ FreePool (AttemptName2);\r
+ }\r
+ }\r
+\r
+ if (IfrNvData->Enabled == ISCSI_DISABLED &&\r
+ Attempt->SessionConfigData.Enabled != ISCSI_DISABLED) {\r
+\r
+ //\r
+ // User updates the Attempt from "Enabled"/"Enabled for MPIO" to "Disabled".\r
+ //\r
+ if (Attempt->SessionConfigData.Enabled == ISCSI_ENABLED_FOR_MPIO) {\r
+ if (mPrivate->MpioCount < 1) {\r
+ return EFI_ABORTED;\r
+ }\r
+\r
+ if (--mPrivate->MpioCount == 0) {\r
+ mPrivate->EnableMpio = FALSE;\r
+ }\r
+ } else if (Attempt->SessionConfigData.Enabled == ISCSI_ENABLED) {\r
+ if (mPrivate->SinglePathCount < 1) {\r
+ return EFI_ABORTED;\r
+ }\r
+ mPrivate->SinglePathCount--;\r
+ }\r
+\r
+ } else if (IfrNvData->Enabled == ISCSI_ENABLED_FOR_MPIO &&\r
+ Attempt->SessionConfigData.Enabled == ISCSI_ENABLED) {\r
+ //\r
+ // User updates the Attempt from "Enabled" to "Enabled for MPIO".\r
+ //\r
+ if (mPrivate->SinglePathCount < 1) {\r
+ return EFI_ABORTED;\r
+ }\r
+\r
+ mPrivate->EnableMpio = TRUE;\r
+ mPrivate->MpioCount++;\r
+ mPrivate->SinglePathCount--;\r
+\r
+ } else if (IfrNvData->Enabled == ISCSI_ENABLED &&\r
+ Attempt->SessionConfigData.Enabled == ISCSI_ENABLED_FOR_MPIO) {\r
+ //\r
+ // User updates the Attempt from "Enabled for MPIO" to "Enabled".\r
+ //\r
+ if (mPrivate->MpioCount < 1) {\r
+ return EFI_ABORTED;\r
+ }\r
+\r
+ if (--mPrivate->MpioCount == 0) {\r
+ mPrivate->EnableMpio = FALSE;\r
+ }\r
+ mPrivate->SinglePathCount++;\r
+\r
+ } else if (IfrNvData->Enabled != ISCSI_DISABLED &&\r
+ Attempt->SessionConfigData.Enabled == ISCSI_DISABLED) {\r
+ //\r
+ // User updates the Attempt from "Disabled" to "Enabled"/"Enabled for MPIO".\r
+ //\r
+ if (IfrNvData->Enabled == ISCSI_ENABLED_FOR_MPIO) {\r
+ mPrivate->EnableMpio = TRUE;\r
+ mPrivate->MpioCount++;\r
+\r
+ } else if (IfrNvData->Enabled == ISCSI_ENABLED) {\r
+ mPrivate->SinglePathCount++;\r
+ }\r
+ }\r
+ Attempt->SessionConfigData.Enabled = IfrNvData->Enabled;\r
+\r
+ } else if ((OffSet >= ATTEMPT_ADDRESS_TYPE_VAR_OFFSET) && (OffSet < ATTEMPT_CONNECT_RETRY_VAR_OFFSET)) {\r
+ AttemptIndex = (UINT8) ((OffSet - ATTEMPT_ADDRESS_TYPE_VAR_OFFSET) + 1);\r
+ Attempt = IScsiConfigGetAttemptByConfigIndex (AttemptIndex);\r
+ if (Attempt == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ Attempt->SessionConfigData.IpMode = IfrNvData->ISCSIIpAddressTypeList[AttemptIndex - 1];\r
+ if (Attempt->SessionConfigData.IpMode < IP_MODE_AUTOCONFIG) {\r
+ Attempt->AutoConfigureMode = 0;\r
+ }\r
+\r
+ } else if ((OffSet >= ATTEMPT_CONNECT_RETRY_VAR_OFFSET) && (OffSet < ATTEMPT_CONNECT_TIMEOUT_VAR_OFFSET)) {\r
+ AttemptIndex = (UINT8) ((OffSet - ATTEMPT_CONNECT_RETRY_VAR_OFFSET) + 1);\r
+ Attempt = IScsiConfigGetAttemptByConfigIndex (AttemptIndex);\r
+ if (Attempt == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\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
+ Attempt = IScsiConfigGetAttemptByConfigIndex (AttemptIndex);\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
+ } 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
+ if (Attempt == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ Attempt->SessionConfigData.InitiatorInfoFromDhcp = IfrNvData->ISCSIInitiatorInfoViaDHCP[AttemptIndex - 1];\r
+\r
+ } else if ((OffSet >= ATTEMPT_TARGET_VIA_DHCP_VAR_OFFSET) && (OffSet < ATTEMPT_TARGET_TCP_PORT_VAR_OFFSET)) {\r
+ AttemptIndex = (UINT8) ((OffSet - ATTEMPT_TARGET_VIA_DHCP_VAR_OFFSET) + 1);\r
+ Attempt = IScsiConfigGetAttemptByConfigIndex (AttemptIndex);\r
+ if (Attempt == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ if ((Attempt->SessionConfigData.IpMode < IP_MODE_AUTOCONFIG) && (Attempt->SessionConfigData.InitiatorInfoFromDhcp)) {\r
+ Attempt->SessionConfigData.TargetInfoFromDhcp = IfrNvData->ISCSITargetInfoViaDHCP[AttemptIndex - 1];\r
+ } else {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"Invalid Configuration, Check value of IpMode or Enable DHCP!",\r
+ NULL\r
+ );\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ } else if ((OffSet >= ATTEMPT_TARGET_TCP_PORT_VAR_OFFSET) && (OffSet < ATTEMPT_AUTHENTICATION_METHOD_VAR_OFFSET)) {\r
+ AttemptIndex = (UINT8) ((OffSet - ATTEMPT_TARGET_TCP_PORT_VAR_OFFSET) / 2 + 1);\r
+ Attempt = IScsiConfigGetAttemptByConfigIndex (AttemptIndex);\r
+ if (Attempt == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ if ((Attempt->SessionConfigData.IpMode < IP_MODE_AUTOCONFIG) && (!Attempt->SessionConfigData.TargetInfoFromDhcp)) {\r
+ Attempt->SessionConfigData.TargetPort = IfrNvData->ISCSITargetTcpPort[AttemptIndex - 1];\r
+ if (Attempt->SessionConfigData.TargetPort == 0) {\r
+ Attempt->SessionConfigData.TargetPort = ISCSI_WELL_KNOWN_PORT;\r
+ }\r
+ } else {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"Invalid Configuration, Check value of IpMode or Target Via DHCP!",\r
+ NULL\r
+ );\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ } else if ((OffSet >= ATTEMPT_AUTHENTICATION_METHOD_VAR_OFFSET) && (OffSet < ATTEMPT_CHARTYPE_VAR_OFFSET)) {\r
+ AttemptIndex = (UINT8) ((OffSet - ATTEMPT_AUTHENTICATION_METHOD_VAR_OFFSET) + 1);\r
+ Attempt = IScsiConfigGetAttemptByConfigIndex (AttemptIndex);\r
+ if (Attempt == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ Attempt->AuthenticationType = IfrNvData->ISCSIAuthenticationMethod[AttemptIndex - 1];\r
+\r
+ } else if ((OffSet >= ATTEMPT_CHARTYPE_VAR_OFFSET) && (OffSet < ATTEMPT_ISID_VAR_OFFSET)) {\r
+ AttemptIndex = (UINT8) ((OffSet - ATTEMPT_CHARTYPE_VAR_OFFSET) + 1);\r
+ Attempt = IScsiConfigGetAttemptByConfigIndex (AttemptIndex);\r
+ if (Attempt == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ if (Attempt->AuthenticationType == ISCSI_AUTH_TYPE_CHAP) {\r
+ Attempt->AuthConfigData.CHAP.CHAPType = IfrNvData->ISCSIChapType[AttemptIndex - 1];\r
+ }\r
+\r
+ } else if (OffSet >= ATTEMPT_ISID_VAR_OFFSET) {\r
+ Index = (UINT8) ((OffSet - ATTEMPT_ISID_VAR_OFFSET) / sizeof (KEYWORD_STR));\r
+ AttemptIndex = Index + 1;\r
+ Attempt = IScsiConfigGetAttemptByConfigIndex (AttemptIndex);\r
+ if (Attempt == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ OffSet = OffSet - Index * sizeof (KEYWORD_STR);\r
+\r
+ if ((OffSet >= ATTEMPT_ISID_VAR_OFFSET) && (OffSet < ATTEMPT_INITIATOR_IP_ADDRESS_VAR_OFFSET)) {\r
+ IScsiParseIsIdFromString (IfrNvData->Keyword[Index].ISCSIIsId, Attempt->SessionConfigData.IsId);\r
+\r
+ } else if ((OffSet >= ATTEMPT_INITIATOR_IP_ADDRESS_VAR_OFFSET) && (OffSet < ATTEMPT_INITIATOR_NET_MASK_VAR_OFFSET)) {\r
+ if ((Attempt->SessionConfigData.IpMode == IP_MODE_IP4) && (!Attempt->SessionConfigData.InitiatorInfoFromDhcp)) {\r
+ //\r
+ // Config Local ip\r
+ //\r
+ Status = NetLibStrToIp4 (IfrNvData->Keyword[Index].ISCSIInitiatorIpAddress, &HostIp.v4);\r
+ if (EFI_ERROR (Status) || ((Attempt->SessionConfigData.SubnetMask.Addr[0] != 0) &&\r
+ !NetIp4IsUnicast (NTOHL (HostIp.Addr[0]), NTOHL(*(UINT32*)Attempt->SessionConfigData.SubnetMask.Addr)))) {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"Invalid IP address!",\r
+ NULL\r
+ );\r
+ return EFI_INVALID_PARAMETER;\r
+ } else {\r
+ CopyMem (&Attempt->SessionConfigData.LocalIp, &HostIp.v4, sizeof (HostIp.v4));\r
+ }\r
+ } else {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"Invalid Configuration, Check value of IpMode or Enable DHCP!",\r
+ NULL\r
+ );\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ } else if ((OffSet >= ATTEMPT_INITIATOR_NET_MASK_VAR_OFFSET) && (OffSet < ATTEMPT_INITIATOR_GATE_WAY_VAR_OFFSET)) {\r
+ if ((Attempt->SessionConfigData.IpMode == IP_MODE_IP4) && (!Attempt->SessionConfigData.InitiatorInfoFromDhcp)) {\r
+ Status = NetLibStrToIp4 (IfrNvData->Keyword[Index].ISCSIInitiatorNetmask, &SubnetMask.v4);\r
+ if (EFI_ERROR (Status) || ((SubnetMask.Addr[0] != 0) && (IScsiGetSubnetMaskPrefixLength (&SubnetMask.v4) == 0))) {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"Invalid Subnet Mask!",\r
+ NULL\r
+ );\r
+ return EFI_INVALID_PARAMETER;\r
+ } else {\r
+ CopyMem (&Attempt->SessionConfigData.SubnetMask, &SubnetMask.v4, sizeof (SubnetMask.v4));\r
+ }\r
+ } else {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"Invalid Configuration, Check value of IpMode or Enable DHCP!",\r
+ NULL\r
+ );\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ } else if ((OffSet >= ATTEMPT_INITIATOR_GATE_WAY_VAR_OFFSET) && (OffSet < ATTEMPT_TARGET_NAME_VAR_OFFSET)) {\r
+ if ((Attempt->SessionConfigData.IpMode == IP_MODE_IP4) && (!Attempt->SessionConfigData.InitiatorInfoFromDhcp)) {\r
+ Status = NetLibStrToIp4 (IfrNvData->Keyword[Index].ISCSIInitiatorGateway, &Gateway.v4);\r
+ if (EFI_ERROR (Status) ||\r
+ ((Gateway.Addr[0] != 0) && (Attempt->SessionConfigData.SubnetMask.Addr[0] != 0) &&\r
+ !NetIp4IsUnicast (NTOHL (Gateway.Addr[0]), NTOHL(*(UINT32*)Attempt->SessionConfigData.SubnetMask.Addr)))) {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"Invalid Gateway!",\r
+ NULL\r
+ );\r
+ return EFI_INVALID_PARAMETER;\r
+ } else {\r
+ CopyMem (&Attempt->SessionConfigData.Gateway, &Gateway.v4, sizeof (Gateway.v4));\r
+ }\r
+ } else {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"Invalid Configuration, Check value of IpMode or Enable DHCP!",\r
+ NULL\r
+ );\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ } else if ((OffSet >= ATTEMPT_TARGET_NAME_VAR_OFFSET) && (OffSet < ATTEMPT_TARGET_IP_ADDRESS_VAR_OFFSET)) {\r
+ if ((Attempt->SessionConfigData.IpMode < IP_MODE_AUTOCONFIG) && (!Attempt->SessionConfigData.TargetInfoFromDhcp)) {\r
+ UnicodeStrToAsciiStrS (IfrNvData->Keyword[Index].ISCSITargetName, IScsiName, ISCSI_NAME_MAX_SIZE);\r
+ Status = IScsiNormalizeName (IScsiName, AsciiStrLen (IScsiName));\r
+ if (EFI_ERROR (Status)) {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"Invalid iSCSI Name!",\r
+ NULL\r
+ );\r
+ } else {\r
+ AsciiStrCpyS (Attempt->SessionConfigData.TargetName, ISCSI_NAME_MAX_SIZE, IScsiName);\r
+ }\r
+ if (Attempt->SessionConfigData.Enabled != ISCSI_DISABLED) {\r
+ if (Attempt->SessionConfigData.TargetName[0] == L'\0') {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"iSCSI target name is NULL!",\r
+ NULL\r
+ );\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ }\r
+ } else {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"Invalid Configuration, Check value of IpMode or Target Via DHCP!",\r
+ NULL\r
+ );\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ } else if ((OffSet >= ATTEMPT_TARGET_IP_ADDRESS_VAR_OFFSET) && (OffSet < ATTEMPT_LUN_VAR_OFFSET)) {\r
+ if ((Attempt->SessionConfigData.IpMode < IP_MODE_AUTOCONFIG) && (!Attempt->SessionConfigData.TargetInfoFromDhcp)) {\r
+ UnicodeStrToAsciiStrS (IfrNvData->Keyword[Index].ISCSITargetIpAddress, IpString, sizeof (IpString));\r
+ Status = IScsiAsciiStrToIp (IpString, Attempt->SessionConfigData.IpMode, &HostIp);\r
+ if (EFI_ERROR (Status) || !IpIsUnicast (&HostIp, Attempt->SessionConfigData.IpMode)) {\r
+ Attempt->SessionConfigData.DnsMode = TRUE;\r
+ ZeroMem (&Attempt->SessionConfigData.TargetIp, sizeof (Attempt->SessionConfigData.TargetIp));\r
+ UnicodeStrToAsciiStrS (IfrNvData->Keyword[Index].ISCSITargetIpAddress, Attempt->SessionConfigData.TargetUrl, ISCSI_NAME_MAX_SIZE);\r
+ } else {\r
+ Attempt->SessionConfigData.DnsMode = FALSE;\r
+ CopyMem (&Attempt->SessionConfigData.TargetIp, &HostIp, sizeof (HostIp));\r
+ }\r
+ } else {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"Invalid Configuration, Check value of IpMode or Target Via DHCP!",\r
+ NULL\r
+ );\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ } else if ((OffSet >= ATTEMPT_LUN_VAR_OFFSET) && (OffSet < ATTEMPT_CHAR_USER_NAME_VAR_OFFSET)) {\r
+ if ((Attempt->SessionConfigData.IpMode < IP_MODE_AUTOCONFIG) && (Attempt->SessionConfigData.TargetInfoFromDhcp == 0)) {\r
+ //\r
+ // Config LUN.\r
+ //\r
+ UnicodeStrToAsciiStrS (IfrNvData->Keyword[Index].ISCSILun, LunString, ISCSI_LUN_STR_MAX_LEN);\r
+ Status = IScsiAsciiStrToLun (LunString, (UINT8 *) &Lun);\r
+ if (EFI_ERROR (Status)) {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"Invalid LUN string, Examples are: 4752-3A4F-6b7e-2F99, 6734-9-156f-127, 4186-9!",\r
+ NULL\r
+ );\r
+ } else {\r
+ CopyMem (&Attempt->SessionConfigData.BootLun, &Lun, sizeof (Lun));\r
+ }\r
+ } else {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"Invalid Configuration, Check value of IpMode or Target Via DHCP!",\r
+ NULL\r
+ );\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ } else if ((OffSet >= ATTEMPT_CHAR_USER_NAME_VAR_OFFSET) && (OffSet < ATTEMPT_CHAR_SECRET_VAR_OFFSET)) {\r
+ if (Attempt->AuthenticationType == ISCSI_AUTH_TYPE_CHAP) {\r
+ UnicodeStrToAsciiStrS (\r
+ IfrNvData->Keyword[Index].ISCSIChapUsername,\r
+ Attempt->AuthConfigData.CHAP.CHAPName,\r
+ ISCSI_CHAP_NAME_STORAGE\r
+ );\r
+\r
+ if (Attempt->SessionConfigData.Enabled != ISCSI_DISABLED) {\r
+ if (IfrNvData->Keyword[Index].ISCSIChapUsername[0] == L'\0') {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"CHAP Name is invalid!",\r
+ NULL\r
+ );\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ }\r
+ } else {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"Invalid Configuration, Check value of AuthenticationType!",\r
+ NULL\r
+ );\r
+ return EFI_INVALID_PARAMETER;\r
+ }\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
+ ISCSI_CHAP_SECRET_STORAGE\r
+ );\r
+\r
+ if (Attempt->SessionConfigData.Enabled != ISCSI_DISABLED) {\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"The Chap Secret minimum length is 12 bytes and the maximum length is 16 bytes.",\r
+ NULL\r
+ );\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ }\r
+ } else {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"Invalid Configuration, Check value of AuthenticationType!",\r
+ NULL\r
+ );\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ } else if ((OffSet >= ATTEMPT_CHAR_REVERSE_USER_NAME_VAR_OFFSET) && (OffSet < ATTEMPT_CHAR_REVERSE_SECRET_VAR_OFFSET)) {\r
+ if (Attempt->AuthConfigData.CHAP.CHAPType == ISCSI_CHAP_MUTUAL) {\r
+ UnicodeStrToAsciiStrS (\r
+ IfrNvData->Keyword[Index].ISCSIReverseChapUsername,\r
+ Attempt->AuthConfigData.CHAP.ReverseCHAPName,\r
+ ISCSI_CHAP_NAME_STORAGE\r
+ );\r
+ if (Attempt->SessionConfigData.Enabled != ISCSI_DISABLED) {\r
+ if (IfrNvData->Keyword[Index].ISCSIReverseChapUsername[0] == L'\0') {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"Reverse CHAP Name is invalid!",\r
+ NULL\r
+ );\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ }\r
+ } else {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"Invalid Configuration, Check value of AuthenticationType or Chap Type!",\r
+ NULL\r
+ );\r
+ return EFI_INVALID_PARAMETER;\r
+ }\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
+ ISCSI_CHAP_SECRET_STORAGE\r
+ );\r
+\r
+ if (Attempt->SessionConfigData.Enabled != ISCSI_DISABLED) {\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"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
+ }\r
+ } else {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"Invalid Configuration, Check value of AuthenticationType or Chap Type!",\r
+ NULL\r
+ );\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+\r
+ //\r
+ // Record the user configuration information in NVR.\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
+ &gEfiIScsiInitiatorNameProtocolGuid,\r
+ ISCSI_CONFIG_VAR_ATTR,\r
+ sizeof (ISCSI_ATTEMPT_CONFIG_NVDATA),\r
+ Attempt\r
+ );\r
+\r
+}\r
+\r
+/**\r
+ Create Hii Extend Label OpCode as the start opcode and end opcode. It is\r
+ a help function.\r
+\r
+ @param[in] StartLabelNumber The number of start label.\r
+ @param[out] StartOpCodeHandle Points to the start opcode handle.\r
+ @param[out] StartLabel Points to the created start opcode.\r
+ @param[out] EndOpCodeHandle Points to the end opcode handle.\r
+ @param[out] EndLabel Points to the created end opcode.\r
+\r
+ @retval EFI_OUT_OF_RESOURCES Do not have sufficient resource to finish this\r
+ operation.\r
+ @retval EFI_INVALID_PARAMETER Any input parameter is invalid.\r
+ @retval EFI_SUCCESS The operation is completed successfully.\r
+\r
+**/\r
+EFI_STATUS\r
+IScsiCreateOpCode (\r
+ IN UINT16 StartLabelNumber,\r
+ OUT VOID **StartOpCodeHandle,\r
+ OUT EFI_IFR_GUID_LABEL **StartLabel,\r
+ OUT VOID **EndOpCodeHandle,\r
+ OUT EFI_IFR_GUID_LABEL **EndLabel\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ EFI_IFR_GUID_LABEL *InternalStartLabel;\r
+ EFI_IFR_GUID_LABEL *InternalEndLabel;\r
+\r
+ if (StartOpCodeHandle == NULL || StartLabel == NULL || EndOpCodeHandle == NULL || EndLabel == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ *StartOpCodeHandle = NULL;\r
+ *EndOpCodeHandle = NULL;\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+\r
+ //\r
+ // Initialize the container for dynamic opcodes.\r
+ //\r
+ *StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ if (*StartOpCodeHandle == NULL) {\r
+ return Status;\r
+ }\r
+\r
+ *EndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ if (*EndOpCodeHandle == NULL) {\r
+ goto Exit;\r
+ }\r
+\r
+ //\r
+ // Create Hii Extend Label OpCode as the start opcode.\r
+ //\r
+ InternalStartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (\r
+ *StartOpCodeHandle,\r
+ &gEfiIfrTianoGuid,\r
+ NULL,\r
+ sizeof (EFI_IFR_GUID_LABEL)\r
+ );\r
+ if (InternalStartLabel == NULL) {\r
+ goto Exit;\r
+ }\r
+\r
+ InternalStartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+ InternalStartLabel->Number = StartLabelNumber;\r
+\r
+ //\r
+ // Create Hii Extend Label OpCode as the end opcode.\r
+ //\r
+ InternalEndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (\r
+ *EndOpCodeHandle,\r
+ &gEfiIfrTianoGuid,\r
+ NULL,\r
+ sizeof (EFI_IFR_GUID_LABEL)\r
+ );\r
+ if (InternalEndLabel == NULL) {\r
+ goto Exit;\r
+ }\r
+\r
+ InternalEndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+ InternalEndLabel->Number = LABEL_END;\r