]> git.proxmox.com Git - mirror_edk2.git/commitdiff
NetworkPkg: Fix some bugs related to iSCSI keyword configuration.
authorZhang, Lubo <lubo.zhang@intel.com>
Fri, 24 Mar 2017 08:43:04 +0000 (16:43 +0800)
committerJiaxin Wu <jiaxin.wu@intel.com>
Sat, 1 Apr 2017 06:52:33 +0000 (14:52 +0800)
Add check logic and error message for some keywords validity.
show target address in URL format and MAC address correctly.

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: Ye Ting <ting.ye@intel.com>
NetworkPkg/IScsiDxe/IScsiConfig.c

index 1fe279e96b516166e5af9bce6ac7362513749f10..56a8685c2c020c480a6eaa46ebfc46a316077ce9 100644 (file)
@@ -628,10 +628,13 @@ IScsiConvertAttemptConfigDataToIfrNvDataByKeyword (
   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
   if ((mPrivate != NULL) && (mPrivate->AttemptCount != 0)) {\r
@@ -702,8 +705,8 @@ IScsiConvertAttemptConfigDataToIfrNvDataByKeyword (
       if (SessionConfigData->DnsMode) {\r
         AsciiStrToUnicodeStrS (\r
           SessionConfigData->TargetUrl,\r
-          IfrNvData->TargetIp,\r
-          sizeof (IfrNvData->TargetIp) / sizeof (IfrNvData->TargetIp[0])\r
+          IfrNvData->Keyword[Index].ISCSITargetIpAddress,\r
+          sizeof (IfrNvData->Keyword[Index].ISCSITargetIpAddress) / sizeof (IfrNvData->Keyword[Index].ISCSITargetIpAddress[0])\r
           );\r
       }\r
 \r
@@ -740,9 +743,25 @@ IScsiConvertAttemptConfigDataToIfrNvDataByKeyword (
           );\r
       }\r
     }\r
-\r
     CopyMem(IfrNvData->ISCSIDisplayAttemptList, AttemptNameList, ATTEMPT_NAME_LIST_SIZE);\r
   }\r
+\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
 /**\r
@@ -1195,6 +1214,8 @@ IScsiConvertlfrNvDataToAttemptConfigDataByKeyword (
   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
@@ -1344,10 +1365,17 @@ IScsiConvertlfrNvDataToAttemptConfigDataByKeyword (
     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
@@ -1355,23 +1383,23 @@ IScsiConvertlfrNvDataToAttemptConfigDataByKeyword (
     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
@@ -1623,7 +1651,7 @@ IScsiConvertlfrNvDataToAttemptConfigDataByKeyword (
           );\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
@@ -1645,6 +1673,7 @@ IScsiConvertlfrNvDataToAttemptConfigDataByKeyword (
 \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
@@ -1652,11 +1681,11 @@ IScsiConvertlfrNvDataToAttemptConfigDataByKeyword (
           );\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
@@ -1680,7 +1709,7 @@ IScsiConvertlfrNvDataToAttemptConfigDataByKeyword (
           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
@@ -1702,6 +1731,7 @@ IScsiConvertlfrNvDataToAttemptConfigDataByKeyword (
 \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
@@ -1709,11 +1739,11 @@ IScsiConvertlfrNvDataToAttemptConfigDataByKeyword (
           );\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