From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.31; helo=mga06.intel.com; envelope-from=eric.jin@intel.com; receiver=edk2-devel@lists.01.org Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 5C20A2034AB02 for ; Sun, 10 Mar 2019 19:43:21 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 10 Mar 2019 19:43:20 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,466,1544515200"; d="scan'208";a="153813399" Received: from shwdeopenpsi175.ccr.corp.intel.com ([10.239.9.33]) by fmsmga001.fm.intel.com with ESMTP; 10 Mar 2019 19:43:19 -0700 From: Eric Jin To: edk2-devel@lists.01.org Date: Mon, 11 Mar 2019 10:43:15 +0800 Message-Id: <20190311024315.4484-1-eric.jin@intel.com> X-Mailer: git-send-email 2.20.0.windows.1 MIME-Version: 1.0 Subject: [edk2-test][Patch 1/1] uefi-sct/SctPkg:Implement iSCSI DevicePathToText Test X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Mar 2019 02:43:21 -0000 Content-Transfer-Encoding: 8bit It is the new checkpoint of iSCSI DevicePathToText. The Lun display is to follow with the UEFI Spec that "The LUN is an 8 byte array that is displayed in hexadecimal format with byte 0 first (i.e., on the left) and byte 7 last (i.e, on the right). Cc: Supreeth Venkatesh Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Eric Jin --- uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/Guid.h | 9 ++++++++- uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/DevicePathToTextBBTestCoverage.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++-- uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/DevicePathToTextBBTestMain.c | 41 +++++++++++++++++++++++++++++++++-------- uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/Guid.c | 3 ++- 4 files changed, 94 insertions(+), 12 deletions(-) diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/Guid.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/Guid.h index 41d2a8a837f5..b03903ca0971 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/Guid.h +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/Guid.h @@ -1,7 +1,7 @@ /** @file Copyright 2006 - 2016 Unified EFI, Inc.
- Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.
+ Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -400,3 +400,10 @@ extern EFI_GUID gDevicePathToTextBBTestFunctionAssertionGuid133; } extern EFI_GUID gDevicePathToTextBBTestFunctionAssertionGuid134; + +#define EFI_TEST_DEVICEPATHTOTEXTBBTESTFUNCTION_ASSERTION_135_GUID \ + { \ + 0xbf73c00e, 0x5a62, 0x4a20, { 0xbe, 0x15, 0x4d, 0x83, 0x7e, 0xe5, 0x7d, 0xdf } \ + } +extern EFI_GUID gDevicePathToTextBBTestFunctionAssertionGuid135; + diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/DevicePathToTextBBTestCoverage.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/DevicePathToTextBBTestCoverage.c index c30af4345158..ee91bdfb63d3 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/DevicePathToTextBBTestCoverage.c +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/DevicePathToTextBBTestCoverage.c @@ -1,7 +1,7 @@ /** @file Copyright 2006 - 2017 Unified EFI, Inc.
- Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.
+ Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -2202,7 +2202,56 @@ DevicePathToTextConvertDeviceNodeToTextCoverageTest ( SctFreePool (Text); } - + // + // The stardand Text in spec is iSCSI(TargetName, PortalGroup, LUN, HeaderDigest, DataDigest, Authentication, Protocol) + // The test use iSCSI(Name,0x12AB,0x0000005678000000,CRC32C,None,CHAP_BI,TCP) as the input to check binary/text convertion + // + // sizeof (ISCSI_DEVICE_PATH_WITH_NAME) + 4 is the length of iSCSI Device Path Node plus Target Name + // The Targat Name is "Name" in this case + // The default protocol used by iSCSI is TCP(0), and 1+ is reserved in UEFI 2.7 spec + // The combination of HeaderDigest, DataDigest and Authentication in this case is 0002 + // The Lun is 0x0000007856000000 in this case to detect the possible display order issue + // please refer to section 10.3.5.21 and Table 102 of UEFI 2.7 Spec for detail. + // + pDeviceNode1 = DevicePathUtilities->CreateDeviceNode (0x3, 0x13, sizeof (ISCSI_DEVICE_PATH_WITH_NAME) + 4); + ((ISCSI_DEVICE_PATH_WITH_NAME *)pDeviceNode1)->NetworkProtocol = 0x0; + ((ISCSI_DEVICE_PATH_WITH_NAME *)pDeviceNode1)->LoginOption = 0x0002; + ((ISCSI_DEVICE_PATH_WITH_NAME *)pDeviceNode1)->Lun = 0x0000007856000000; + ((ISCSI_DEVICE_PATH_WITH_NAME *)pDeviceNode1)->TargetPortalGroupTag = 0x12AB; + ((ISCSI_DEVICE_PATH_WITH_NAME *)pDeviceNode1)->iSCSITargetName[0] = 'N'; + ((ISCSI_DEVICE_PATH_WITH_NAME *)pDeviceNode1)->iSCSITargetName[1] = 'a'; + ((ISCSI_DEVICE_PATH_WITH_NAME *)pDeviceNode1)->iSCSITargetName[2] = 'm'; + ((ISCSI_DEVICE_PATH_WITH_NAME *)pDeviceNode1)->iSCSITargetName[3] = 'e'; + + Text = DevicePathToText->ConvertDeviceNodeToText (pDeviceNode1, FALSE, FALSE); + pDeviceNode2 = SctConvertTextToDeviceNode(Text); + + if ((pDeviceNode2 != NULL) && (SctCompareMem (pDeviceNode2, pDeviceNode1, SctDevicePathNodeLength(pDeviceNode1)) == 0)) { + AssertionType = EFI_TEST_ASSERTION_PASSED; + } else { + AssertionType = EFI_TEST_ASSERTION_FAILED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gDevicePathToTextBBTestFunctionAssertionGuid135, + L"EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL - ConvertDeviceNodeToText must correctly recover the converting ConvertTextToDeviceNode has acted on the device node string", + L"%a:%d: Convert result: %s - Expected:iSCSI(MyTargetName,0x12AB,0x0000005678000000,CRC32C,None,CHAP_BI,TCP)", + __FILE__, + (UINTN)__LINE__, + Text + ); + if (pDeviceNode1 != NULL) { + SctFreePool (pDeviceNode1); + } + if (pDeviceNode2 != NULL) { + SctFreePool (pDeviceNode2); + } + if (Text != NULL) { + SctFreePool (Text); + } + return EFI_SUCCESS; } diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/DevicePathToTextBBTestMain.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/DevicePathToTextBBTestMain.c index 41cf217b5f88..d08097769391 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/DevicePathToTextBBTestMain.c +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/DevicePathToTextBBTestMain.c @@ -1,7 +1,7 @@ /** @file Copyright 2006 - 2017 Unified EFI, Inc.
- Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.
+ Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -2437,34 +2437,40 @@ BuildiSCSIDeviceNode ( CHAR16 *LunStr; UINT16 Options; UINT64 LunNum; + UINT64 TempLunNum; Status = GetNextRequiredParam(&TextDeviceNode, L"TargetName", &ParamIdentifierStr, &ParamIdentifierVal); if ((!EFI_ERROR(Status)) && (ParamIdentifierVal != NULL)) { NameStr = ParamIdentifierVal; } else { - return NULL; + return NULL; } Status = GetNextRequiredParam(&TextDeviceNode, L"PortalGroup", &ParamIdentifierStr, &ParamIdentifierVal); if ((!EFI_ERROR(Status)) && (ParamIdentifierVal != NULL)) { PortalGroupStr = ParamIdentifierVal; } else { - return NULL; + return NULL; } Status = GetNextRequiredParam(&TextDeviceNode, L"LUN", &ParamIdentifierStr, &ParamIdentifierVal); if ((!EFI_ERROR(Status)) && (ParamIdentifierVal != NULL)) { LunStr = ParamIdentifierVal; } else { - return NULL; + return NULL; } - Length = sizeof (ISCSI_DEVICE_PATH_WITH_NAME) + (UINT16) (SctStrLen (NameStr) * 2 + 2); + Length = sizeof (ISCSI_DEVICE_PATH_WITH_NAME) + (UINT16) (SctStrLen (NameStr)); iSCSI = (ISCSI_DEVICE_PATH_WITH_NAME *) CreateDeviceNode (0x3, 0x13, Length); if (iSCSI == NULL) { - return NULL; + return NULL; } + + // + // The iSCSI Device Node Options describe iSCSI login options for the key values + // Please refer to the section 10.3.5.21 of the UEFI 2.7 spec for the detail + // Options = 0x0000; for (OptionalParamIndex = 0;OptionalParamIndex < 5; OptionalParamIndex++) { @@ -2499,7 +2505,7 @@ BuildiSCSIDeviceNode ( if (SctStrCmp (ParamIdentifierVal, L"CRC32C") == 0) { Options |= 0x0002; } - break; + break; case 1: // DataDigest if (SctStrCmp (ParamIdentifierVal, L"CRC32C") == 0) { @@ -2514,6 +2520,9 @@ BuildiSCSIDeviceNode ( if (SctStrCmp (ParamIdentifierVal, L"CHAP_UNI") == 0) { Options |= 0x1000; } + if (SctStrCmp (ParamIdentifierVal, L"CHAP_BI") == 0) { + Options |= 0x0000; + } break; case 3: // Protocol @@ -2533,8 +2542,24 @@ BuildiSCSIDeviceNode ( SctUnicodeToAscii (iSCSI->iSCSITargetName, NameStr, SctStrLen (NameStr)); iSCSI->TargetPortalGroupTag = (UINT16) SctStrToUInt (PortalGroupStr); - SctStrToUInt64 (LunStr, &LunNum); + + // + // The LUN is an 8 byte array that is displayed in hexadecimal format with byte + // 0 first (i.e., on the left) and byte 7 last (i.e, on the right), and is required. + // + SctStrToUInt64 (LunStr, &TempLunNum); + LunNum = 0; + + LunNum = SctLShiftU64((TempLunNum & 0x00000000000000FF), 56);; + LunNum = LunNum | SctLShiftU64((TempLunNum & 0x000000000000FF00), 40); + LunNum = LunNum | SctLShiftU64((TempLunNum & 0x0000000000FF0000), 24); + LunNum = LunNum | SctLShiftU64((TempLunNum & 0x00000000FF000000), 8); + LunNum = LunNum | SctRShiftU64((TempLunNum & 0x000000FF00000000), 8); + LunNum = LunNum | SctRShiftU64((TempLunNum & 0x0000FF0000000000), 24); + LunNum = LunNum | SctRShiftU64((TempLunNum & 0x00FF000000000000), 40); + LunNum = LunNum | SctRShiftU64((TempLunNum & 0xFF00000000000000), 56); iSCSI->Lun = LunNum; + iSCSI->LoginOption = (UINT16) Options; return (EFI_DEVICE_PATH_PROTOCOL *) iSCSI; diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/Guid.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/Guid.c index 9cad8d31d384..1eeb3552093f 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/Guid.c +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/Guid.c @@ -1,7 +1,7 @@ /** @file Copyright 2006 - 2015 Unified EFI, Inc.
- Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.
+ Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -136,3 +136,4 @@ EFI_GUID gDevicePathToTextBBTestFunctionAssertionGuid133 = EFI_TEST_DEVICEPATHT EFI_GUID gDevicePathToTextBBTestFunctionAssertionGuid134 = EFI_TEST_DEVICEPATHTOTEXTBBTESTFUNCTION_ASSERTION_134_GUID; +EFI_GUID gDevicePathToTextBBTestFunctionAssertionGuid135 = EFI_TEST_DEVICEPATHTOTEXTBBTESTFUNCTION_ASSERTION_135_GUID; -- 2.20.0.windows.1