mirror of https://github.com/acidanthera/audk.git
NetworkPkg: Add check logic for some variable in iSCSI driver.
v2: need to check the global variable mPrivate before using it in the Convert AttemptConfigData To IfrNvData by Keyword function. Add check logic for some attempt variable to enhance code in iSCSI. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Zhang Lubo <lubo.zhang@intel.com> Cc: Ye Ting <ting.ye@intel.com> Cc: Fu Siyuan <siyuan.fu@intel.com> Cc: Wu Jiaxin <jiaxin.wu@intel.com> Reviewed-by: Wu Jiaxin <jiaxin.wu@intel.com>
This commit is contained in:
parent
e4408576df
commit
2fd40fa58f
|
@ -630,112 +630,119 @@ IScsiConvertAttemptConfigDataToIfrNvDataByKeyword (
|
|||
CHAR16 AttemptNameList[ATTEMPT_NAME_LIST_SIZE];
|
||||
EFI_IP_ADDRESS Ip;
|
||||
UINTN Index;
|
||||
UINTN StringLen;
|
||||
|
||||
ZeroMem (AttemptNameList, sizeof (AttemptNameList));
|
||||
|
||||
NET_LIST_FOR_EACH (Entry, &mPrivate->AttemptConfigs) {
|
||||
Attempt = NET_LIST_USER_STRUCT (Entry, ISCSI_ATTEMPT_CONFIG_NVDATA, Link);
|
||||
//
|
||||
// Normal session configuration parameters.
|
||||
//
|
||||
SessionConfigData = &Attempt->SessionConfigData;
|
||||
if ((mPrivate != NULL) && (mPrivate->AttemptCount != 0)) {
|
||||
NET_LIST_FOR_EACH (Entry, &mPrivate->AttemptConfigs) {
|
||||
Attempt = NET_LIST_USER_STRUCT (Entry, ISCSI_ATTEMPT_CONFIG_NVDATA, Link);
|
||||
//
|
||||
// Normal session configuration parameters.
|
||||
//
|
||||
SessionConfigData = &Attempt->SessionConfigData;
|
||||
|
||||
Index = Attempt->AttemptConfigIndex - 1;
|
||||
ASSERT ((Attempt->AttemptConfigIndex > 0) && (Attempt->AttemptConfigIndex <= FixedPcdGet8 (PcdMaxIScsiAttemptNumber)));
|
||||
Index = Attempt->AttemptConfigIndex - 1;
|
||||
|
||||
//
|
||||
// Save the attempt to AttemptNameList as Attempt:1 Attempt:2
|
||||
//
|
||||
AsciiStrToUnicodeStrS (
|
||||
Attempt->AttemptName,
|
||||
AttemptNameList + StrLen (AttemptNameList),
|
||||
ATTEMPT_NAME_LIST_SIZE
|
||||
);
|
||||
*(AttemptNameList + StrLen (AttemptNameList) - 2) = L':';
|
||||
*(AttemptNameList + StrLen (AttemptNameList)) = L' ';
|
||||
|
||||
AsciiStrToUnicodeStrS (
|
||||
Attempt->AttemptName,
|
||||
IfrNvData->ISCSIAttemptName + ATTEMPT_NAME_SIZE * Index,
|
||||
ATTEMPT_NAME_SIZE
|
||||
);
|
||||
|
||||
IfrNvData->ISCSIBootEnableList[Index] = SessionConfigData->Enabled;
|
||||
IfrNvData->ISCSIIpAddressTypeList[Index] = SessionConfigData->IpMode;
|
||||
|
||||
IfrNvData->ISCSIInitiatorInfoViaDHCP[Index] = SessionConfigData->InitiatorInfoFromDhcp;
|
||||
IfrNvData->ISCSITargetInfoViaDHCP[Index] = SessionConfigData->TargetInfoFromDhcp;
|
||||
IfrNvData->ISCSIConnectRetry[Index] = SessionConfigData->ConnectRetryCount;
|
||||
IfrNvData->ISCSIConnectTimeout[Index] = SessionConfigData->ConnectTimeout;
|
||||
IfrNvData->ISCSITargetTcpPort[Index] = SessionConfigData->TargetPort;
|
||||
|
||||
if (SessionConfigData->IpMode == IP_MODE_IP4) {
|
||||
CopyMem (&Ip.v4, &SessionConfigData->LocalIp, sizeof (EFI_IPv4_ADDRESS));
|
||||
IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorIpAddress);
|
||||
CopyMem (&Ip.v4, &SessionConfigData->SubnetMask, sizeof (EFI_IPv4_ADDRESS));
|
||||
IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorNetmask);
|
||||
CopyMem (&Ip.v4, &SessionConfigData->Gateway, sizeof (EFI_IPv4_ADDRESS));
|
||||
IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorGateway);
|
||||
if (SessionConfigData->TargetIp.v4.Addr[0] != '\0') {
|
||||
CopyMem (&Ip.v4, &SessionConfigData->TargetIp, sizeof (EFI_IPv4_ADDRESS));
|
||||
IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSITargetIpAddress);
|
||||
}
|
||||
} else if (SessionConfigData->IpMode == IP_MODE_IP6) {
|
||||
ZeroMem (IfrNvData->Keyword[Index].ISCSITargetIpAddress, sizeof (IfrNvData->TargetIp));
|
||||
if (SessionConfigData->TargetIp.v6.Addr[0] != '\0') {
|
||||
IP6_COPY_ADDRESS (&Ip.v6, &SessionConfigData->TargetIp);
|
||||
IScsiIpToStr (&Ip, TRUE, IfrNvData->Keyword[Index].ISCSITargetIpAddress);
|
||||
}
|
||||
}
|
||||
|
||||
AsciiStrToUnicodeStrS (
|
||||
SessionConfigData->TargetName,
|
||||
IfrNvData->Keyword[Index].ISCSITargetName,
|
||||
ISCSI_NAME_MAX_SIZE
|
||||
//
|
||||
// Save the attempt to AttemptNameList as Attempt:1 Attempt:2
|
||||
//
|
||||
AsciiStrToUnicodeStrS (
|
||||
Attempt->AttemptName,
|
||||
AttemptNameList + StrLen (AttemptNameList),
|
||||
ATTEMPT_NAME_LIST_SIZE - StrLen (AttemptNameList)
|
||||
);
|
||||
|
||||
if (SessionConfigData->DnsMode) {
|
||||
StringLen = StrLen (AttemptNameList);
|
||||
ASSERT (StringLen > 2);
|
||||
*(AttemptNameList + StringLen - 2) = L':';
|
||||
*(AttemptNameList + StringLen) = L' ';
|
||||
|
||||
AsciiStrToUnicodeStrS (
|
||||
SessionConfigData->TargetUrl,
|
||||
IfrNvData->TargetIp,
|
||||
sizeof (IfrNvData->TargetIp) / sizeof (IfrNvData->TargetIp[0])
|
||||
Attempt->AttemptName,
|
||||
IfrNvData->ISCSIAttemptName + ATTEMPT_NAME_SIZE * Index,
|
||||
ATTEMPT_NAME_LIST_SIZE - ATTEMPT_NAME_SIZE * Index
|
||||
);
|
||||
|
||||
IfrNvData->ISCSIBootEnableList[Index] = SessionConfigData->Enabled;
|
||||
IfrNvData->ISCSIIpAddressTypeList[Index] = SessionConfigData->IpMode;
|
||||
|
||||
IfrNvData->ISCSIInitiatorInfoViaDHCP[Index] = SessionConfigData->InitiatorInfoFromDhcp;
|
||||
IfrNvData->ISCSITargetInfoViaDHCP[Index] = SessionConfigData->TargetInfoFromDhcp;
|
||||
IfrNvData->ISCSIConnectRetry[Index] = SessionConfigData->ConnectRetryCount;
|
||||
IfrNvData->ISCSIConnectTimeout[Index] = SessionConfigData->ConnectTimeout;
|
||||
IfrNvData->ISCSITargetTcpPort[Index] = SessionConfigData->TargetPort;
|
||||
|
||||
if (SessionConfigData->IpMode == IP_MODE_IP4) {
|
||||
CopyMem (&Ip.v4, &SessionConfigData->LocalIp, sizeof (EFI_IPv4_ADDRESS));
|
||||
IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorIpAddress);
|
||||
CopyMem (&Ip.v4, &SessionConfigData->SubnetMask, sizeof (EFI_IPv4_ADDRESS));
|
||||
IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorNetmask);
|
||||
CopyMem (&Ip.v4, &SessionConfigData->Gateway, sizeof (EFI_IPv4_ADDRESS));
|
||||
IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSIInitiatorGateway);
|
||||
if (SessionConfigData->TargetIp.v4.Addr[0] != '\0') {
|
||||
CopyMem (&Ip.v4, &SessionConfigData->TargetIp, sizeof (EFI_IPv4_ADDRESS));
|
||||
IScsiIpToStr (&Ip, FALSE, IfrNvData->Keyword[Index].ISCSITargetIpAddress);
|
||||
}
|
||||
} else if (SessionConfigData->IpMode == IP_MODE_IP6) {
|
||||
ZeroMem (IfrNvData->Keyword[Index].ISCSITargetIpAddress, sizeof (IfrNvData->TargetIp));
|
||||
if (SessionConfigData->TargetIp.v6.Addr[0] != '\0') {
|
||||
IP6_COPY_ADDRESS (&Ip.v6, &SessionConfigData->TargetIp);
|
||||
IScsiIpToStr (&Ip, TRUE, IfrNvData->Keyword[Index].ISCSITargetIpAddress);
|
||||
}
|
||||
}
|
||||
|
||||
AsciiStrToUnicodeStrS (
|
||||
SessionConfigData->TargetName,
|
||||
IfrNvData->Keyword[Index].ISCSITargetName,
|
||||
ISCSI_NAME_MAX_SIZE
|
||||
);
|
||||
|
||||
if (SessionConfigData->DnsMode) {
|
||||
AsciiStrToUnicodeStrS (
|
||||
SessionConfigData->TargetUrl,
|
||||
IfrNvData->TargetIp,
|
||||
sizeof (IfrNvData->TargetIp) / sizeof (IfrNvData->TargetIp[0])
|
||||
);
|
||||
}
|
||||
|
||||
IScsiLunToUnicodeStr (SessionConfigData->BootLun, IfrNvData->Keyword[Index].ISCSILun);
|
||||
IScsiConvertIsIdToString (IfrNvData->Keyword[Index].ISCSIIsId, SessionConfigData->IsId);
|
||||
|
||||
IfrNvData->ISCSIAuthenticationMethod[Index] = Attempt->AuthenticationType;
|
||||
|
||||
if (Attempt->AuthenticationType == ISCSI_AUTH_TYPE_CHAP) {
|
||||
AuthConfigData = &Attempt->AuthConfigData.CHAP;
|
||||
IfrNvData->ISCSIChapType[Index] = AuthConfigData->CHAPType;
|
||||
AsciiStrToUnicodeStrS (
|
||||
AuthConfigData->CHAPName,
|
||||
IfrNvData->Keyword[Index].ISCSIChapUsername,
|
||||
ISCSI_CHAP_NAME_STORAGE
|
||||
);
|
||||
|
||||
AsciiStrToUnicodeStrS (
|
||||
AuthConfigData->CHAPSecret,
|
||||
IfrNvData->Keyword[Index].ISCSIChapSecret,
|
||||
ISCSI_CHAP_SECRET_STORAGE
|
||||
);
|
||||
|
||||
AsciiStrToUnicodeStrS (
|
||||
AuthConfigData->ReverseCHAPName,
|
||||
IfrNvData->Keyword[Index].ISCSIReverseChapUsername,
|
||||
ISCSI_CHAP_NAME_STORAGE
|
||||
);
|
||||
|
||||
AsciiStrToUnicodeStrS (
|
||||
AuthConfigData->ReverseCHAPSecret,
|
||||
IfrNvData->Keyword[Index].ISCSIReverseChapSecret,
|
||||
ISCSI_CHAP_SECRET_STORAGE
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
IScsiLunToUnicodeStr (SessionConfigData->BootLun, IfrNvData->Keyword[Index].ISCSILun);
|
||||
IScsiConvertIsIdToString (IfrNvData->Keyword[Index].ISCSIIsId, SessionConfigData->IsId);
|
||||
|
||||
IfrNvData->ISCSIAuthenticationMethod[Index] = Attempt->AuthenticationType;
|
||||
|
||||
if (Attempt->AuthenticationType == ISCSI_AUTH_TYPE_CHAP) {
|
||||
AuthConfigData = &Attempt->AuthConfigData.CHAP;
|
||||
IfrNvData->ISCSIChapType[Index] = AuthConfigData->CHAPType;
|
||||
AsciiStrToUnicodeStrS (
|
||||
AuthConfigData->CHAPName,
|
||||
IfrNvData->Keyword[Index].ISCSIChapUsername,
|
||||
ISCSI_CHAP_NAME_STORAGE
|
||||
);
|
||||
|
||||
AsciiStrToUnicodeStrS (
|
||||
AuthConfigData->CHAPSecret,
|
||||
IfrNvData->Keyword[Index].ISCSIChapSecret,
|
||||
ISCSI_CHAP_SECRET_STORAGE
|
||||
);
|
||||
|
||||
AsciiStrToUnicodeStrS (
|
||||
AuthConfigData->ReverseCHAPName,
|
||||
IfrNvData->Keyword[Index].ISCSIReverseChapUsername,
|
||||
ISCSI_CHAP_NAME_STORAGE
|
||||
);
|
||||
|
||||
AsciiStrToUnicodeStrS (
|
||||
AuthConfigData->ReverseCHAPSecret,
|
||||
IfrNvData->Keyword[Index].ISCSIReverseChapSecret,
|
||||
ISCSI_CHAP_SECRET_STORAGE
|
||||
);
|
||||
}
|
||||
CopyMem(IfrNvData->ISCSIDisplayAttemptList, AttemptNameList, ATTEMPT_NAME_LIST_SIZE);
|
||||
}
|
||||
|
||||
CopyMem(IfrNvData->ISCSIDisplayAttemptList, AttemptNameList, ATTEMPT_NAME_LIST_SIZE);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1201,6 +1208,7 @@ IScsiConvertlfrNvDataToAttemptConfigDataByKeyword (
|
|||
UINT64 Lun;
|
||||
EFI_STATUS Status;
|
||||
|
||||
Attempt = NULL;
|
||||
ZeroMem (IScsiName, sizeof (IScsiName));
|
||||
|
||||
if (OffSet < ATTEMPT_BOOTENABLE_VAR_OFFSET) {
|
||||
|
@ -1728,7 +1736,7 @@ IScsiConvertlfrNvDataToAttemptConfigDataByKeyword (
|
|||
//
|
||||
// Record the user configuration information in NVR.
|
||||
//
|
||||
|
||||
ASSERT (Attempt != NULL);
|
||||
UnicodeSPrint (mPrivate->PortString, (UINTN) ISCSI_NAME_IFR_MAX_SIZE, L"Attempt %d", Attempt->AttemptConfigIndex);
|
||||
return gRT->SetVariable (
|
||||
mPrivate->PortString,
|
||||
|
@ -2707,6 +2715,7 @@ IScsiConfigProcessDefault (
|
|||
UINTN Index;
|
||||
EFI_INPUT_KEY Key;
|
||||
|
||||
AttemptConfigData = NULL;
|
||||
//
|
||||
// Is User creating a new attempt?
|
||||
//
|
||||
|
@ -2751,37 +2760,38 @@ IScsiConfigProcessDefault (
|
|||
&AttemptConfigOrderSize
|
||||
);
|
||||
|
||||
if (AttemptConfigOrder != NULL) {
|
||||
if (AttemptConfigOrder == NULL) {
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
|
||||
for (Index = 0; Index < AttemptConfigOrderSize / sizeof (UINT8); Index++) {
|
||||
UnicodeSPrint (
|
||||
mPrivate->PortString,
|
||||
(UINTN) ISCSI_NAME_IFR_MAX_SIZE,
|
||||
L"Attempt %d",
|
||||
(UINTN) AttemptConfigOrder[Index]
|
||||
);
|
||||
GetVariable2 (
|
||||
mPrivate->PortString,
|
||||
&gEfiIScsiInitiatorNameProtocolGuid,
|
||||
(VOID**)&AttemptConfigData,
|
||||
NULL
|
||||
);
|
||||
if (AttemptConfigData == NULL || AttemptConfigData->Actived == ISCSI_ACTIVE_ENABLED) {
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (Index > PcdGet8 (PcdMaxIScsiAttemptNumber)) {
|
||||
CreatePopUp (
|
||||
EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,
|
||||
&Key,
|
||||
L"Can not create more attempts, Please configure the PcdMaxIScsiAttemptNumber if needed!",
|
||||
NULL
|
||||
);
|
||||
return EFI_UNSUPPORTED;
|
||||
for (Index = 0; Index < AttemptConfigOrderSize / sizeof (UINT8); Index++) {
|
||||
UnicodeSPrint (
|
||||
mPrivate->PortString,
|
||||
(UINTN) ISCSI_NAME_IFR_MAX_SIZE,
|
||||
L"Attempt %d",
|
||||
(UINTN) AttemptConfigOrder[Index]
|
||||
);
|
||||
GetVariable2 (
|
||||
mPrivate->PortString,
|
||||
&gEfiIScsiInitiatorNameProtocolGuid,
|
||||
(VOID**)&AttemptConfigData,
|
||||
NULL
|
||||
);
|
||||
if (AttemptConfigData == NULL || AttemptConfigData->Actived == ISCSI_ACTIVE_ENABLED) {
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (Index > PcdGet8 (PcdMaxIScsiAttemptNumber)) {
|
||||
CreatePopUp (
|
||||
EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,
|
||||
&Key,
|
||||
L"Can not create more attempts, Please configure the PcdMaxIScsiAttemptNumber if needed!",
|
||||
NULL
|
||||
);
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
if (AttemptConfigOrder != NULL) {
|
||||
|
@ -2798,6 +2808,7 @@ IScsiConfigProcessDefault (
|
|||
MacString
|
||||
);
|
||||
|
||||
ASSERT (AttemptConfigData != NULL);
|
||||
UnicodeStrToAsciiStrS (MacString, AttemptConfigData->MacString, sizeof (AttemptConfigData->MacString));
|
||||
AttemptConfigData->NicIndex = NicIndex;
|
||||
AttemptConfigData->Actived = ISCSI_ACTIVE_ENABLED;
|
||||
|
@ -3128,6 +3139,7 @@ IScsiFormRouteConfig (
|
|||
Index2 = 0;
|
||||
NicInfo = NULL;
|
||||
AttemptList = NULL;
|
||||
Status = EFI_SUCCESS;
|
||||
|
||||
if (This == NULL || Configuration == NULL || Progress == NULL) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
|
@ -3184,14 +3196,23 @@ IScsiFormRouteConfig (
|
|||
goto Exit;
|
||||
}
|
||||
} else {
|
||||
Status = gIScsiInitiatorName.Get (&gIScsiInitiatorName, &BufferSize, InitiatorName);
|
||||
Status = IScsiGetValue (Configuration, L"&OFFSET=", &OffSet);
|
||||
if (EFI_ERROR (Status)) {
|
||||
CreatePopUp (
|
||||
EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,
|
||||
&Key,
|
||||
L"Error: please configure iSCSI initiator name first!",
|
||||
NULL
|
||||
);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
if (OffSet >= ATTEMPT_MAC_ADDR_VAR_OFFSET) {
|
||||
Status = gIScsiInitiatorName.Get (&gIScsiInitiatorName, &BufferSize, InitiatorName);
|
||||
if (EFI_ERROR (Status)) {
|
||||
CreatePopUp (
|
||||
EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,
|
||||
&Key,
|
||||
L"Error: please configure iSCSI initiator name first!",
|
||||
NULL
|
||||
);
|
||||
goto Exit;
|
||||
}
|
||||
} else {
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
|
@ -3290,10 +3311,6 @@ IScsiFormRouteConfig (
|
|||
}
|
||||
|
||||
} else {
|
||||
Status = IScsiGetValue (Configuration, L"&OFFSET=", &OffSet);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto Exit;
|
||||
}
|
||||
Status = IScsiConvertlfrNvDataToAttemptConfigDataByKeyword (IfrNvData, OffSet);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto Exit;
|
||||
|
@ -3303,8 +3320,6 @@ IScsiFormRouteConfig (
|
|||
|
||||
IScsiConfigUpdateAttempt ();
|
||||
|
||||
Status = EFI_SUCCESS;
|
||||
|
||||
Exit:
|
||||
if (InitiatorName != NULL) {
|
||||
FreePool (InitiatorName);
|
||||
|
|
|
@ -31,7 +31,6 @@ extern ISCSI_FORM_CALLBACK_INFO *mCallbackInfo;
|
|||
#define QUESTION_ID(Field) \
|
||||
((UINT16) (VAR_OFFSET (Field) + CONFIG_OPTION_OFFSET))
|
||||
|
||||
|
||||
#define DYNAMIC_ONE_OF_VAR_OFFSET VAR_OFFSET (Enabled)
|
||||
#define DYNAMIC_ORDERED_LIST_QUESTION_ID QUESTION_ID (DynamicOrderedList)
|
||||
#define DYNAMIC_ORDERED_LIST_VAR_OFFSET VAR_OFFSET (DynamicOrderedList)
|
||||
|
@ -43,6 +42,7 @@ extern ISCSI_FORM_CALLBACK_INFO *mCallbackInfo;
|
|||
//
|
||||
// Define QuestionId and OffSet for Keywords.
|
||||
//
|
||||
#define ATTEMPT_MAC_ADDR_VAR_OFFSET VAR_OFFSET (ISCSIMacAddr)
|
||||
#define ATTEMPT_ATTEMPT_NAME_QUESTION_ID QUESTION_ID (ISCSIAttemptName)
|
||||
#define ATTEMPT_ATTEMPT_NAME_VAR_OFFSET VAR_OFFSET (ISCSIAttemptName)
|
||||
#define ATTEMPT_BOOTENABLE_QUESTION_ID QUESTION_ID (ISCSIBootEnableList)
|
||||
|
|
Loading…
Reference in New Issue