The implementation of iSCSI protocol based on RFC3720.\r
\r
Copyright (c) 2004 - 2018, 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
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
return Status;\r
}\r
\r
+/**\r
+ Re-set any stateful session-level authentication information that is used by\r
+ the leading login / leading connection.\r
+\r
+ (Note that this driver only supports a single connection per session -- see\r
+ ISCSI_MAX_CONNS_PER_SESSION.)\r
+\r
+ @param[in,out] Session The iSCSI session.\r
+**/\r
+STATIC\r
+VOID\r
+IScsiSessionResetAuthData (\r
+ IN OUT ISCSI_SESSION *Session\r
+ )\r
+{\r
+ if (Session->AuthType == ISCSI_AUTH_TYPE_CHAP) {\r
+ Session->AuthData.CHAP.Hash = NULL;\r
+ }\r
+}\r
+\r
/**\r
Login the iSCSI session.\r
\r
IScsiAttatchConnection (Session, Conn);\r
\r
//\r
- // Login througth the newly created connection.\r
+ // Login through the newly created connection.\r
//\r
+ IScsiSessionResetAuthData (Session);\r
Status = IScsiConnLogin (Conn, Session->ConfigData->SessionConfigData.ConnectTimeout);\r
if (EFI_ERROR (Status)) {\r
IScsiConnReset (Conn);\r
LoginReq->CmdSN = HTONL (Session->CmdSN);\r
\r
//\r
- // For the first Login Request on a coonection this is ExpStatSN for the\r
+ // For the first Login Request on a connection this is ExpStatSN for the\r
// old connection, and this field is only valid if the Login Request restarts\r
// a connection.\r
// For subsequent Login Requests it is used to acknowledge the Login Responses\r
// A Login Response with the C bit set to 1 MUST have the T bit set to 0.\r
// The CSG in the Login Response MUST be the same with the I-end of this connection.\r
// The T bit can't be 1 if the last Login Response sent by the initiator doesn't\r
- // initiate the transistion.\r
+ // initiate the transition.\r
// The NSG MUST be the same with the I-end of this connection if Transit is required.\r
// The ISID in the Login Response MUST be the same with this session.\r
//\r
}\r
\r
//\r
- // Save the origial user setting which specifies the proxy/virtual iSCSI target.\r
+ // Save the original user setting which specifies the proxy/virtual iSCSI target.\r
//\r
NvData->OriginalTargetPort = NvData->TargetPort;\r
\r
if (*TargetAddress == ',') {\r
//\r
- // Comma and the portal group tag MUST be ommitted if the TargetAddress is sent\r
+ // Comma and the portal group tag MUST be omitted if the TargetAddress is sent\r
// as the result of a redirection.\r
//\r
continue;\r
}\r
\r
//\r
- // Save the origial user setting which specifies the proxy/virtual iSCSI target.\r
+ // Save the original user setting which specifies the proxy/virtual iSCSI target.\r
//\r
CopyMem (&NvData->OriginalTargetIp, &NvData->TargetIp, sizeof (EFI_IP_ADDRESS));\r
\r
\r
@param[in, out] Conn The connection in iSCSI login.\r
\r
- @retval EFI_SUCCESS The parmeter check is passed and negotiation is finished.\r
+ @retval EFI_SUCCESS The parameter check is passed and negotiation is finished.\r
@retval EFI_PROTOCOL_ERROR Some kind of iSCSI protocol error occurred.\r
@retval EFI_OUT_OF_RESOURCES Failed to allocate memory.\r
\r
goto ON_ERROR;\r
}\r
//\r
- // ErrorRecoveryLevel: result fuction is Minimum.\r
+ // ErrorRecoveryLevel: result function is Minimum.\r
//\r
Value = IScsiGetValueByKeyFromList (KeyValueList, ISCSI_KEY_ERROR_RECOVERY_LEVEL);\r
if (Value == NULL) {\r
Conn->MaxRecvDataSegmentLength = (UINT32) IScsiNetNtoi (Value);\r
}\r
//\r
- // MaxBurstLength: result funtion is Mininum.\r
+ // MaxBurstLength: result function is Minimum.\r
//\r
Value = IScsiGetValueByKeyFromList (KeyValueList, ISCSI_KEY_MAX_BURST_LENGTH);\r
if (Value == NULL) {\r
}\r
\r
\r
-/**\r
- Find the task control block by the initator task tag.\r
-\r
- @param[in] TcbList The tcb list.\r
- @param[in] InitiatorTaskTag The initiator task tag.\r
-\r
- @return The task control block found.\r
- @retval NULL The task control block cannot be found.\r
-\r
-**/\r
-ISCSI_TCB *\r
-IScsiFindTcbByITT (\r
- IN LIST_ENTRY *TcbList,\r
- IN UINT32 InitiatorTaskTag\r
- )\r
-{\r
- ISCSI_TCB *Tcb;\r
- LIST_ENTRY *Entry;\r
-\r
- Tcb = NULL;\r
-\r
- NET_LIST_FOR_EACH (Entry, TcbList) {\r
- Tcb = NET_LIST_USER_STRUCT (Entry, ISCSI_TCB, Link);\r
-\r
- if (Tcb->InitiatorTaskTag == InitiatorTaskTag) {\r
- break;\r
- }\r
- }\r
-\r
- return Tcb;\r
-}\r
-\r
-\r
/**\r
Create a data segment, pad it, and calculate the CRC if needed.\r
\r
\r
if (Session->ImmediateData && (Packet->OutTransferLength != 0)) {\r
//\r
- // Send immediate data in this SCSI Command PDU. The length of the immeidate\r
+ // Send immediate data in this SCSI Command PDU. The length of the immediate\r
// data is the minimum of FirstBurstLength, the data length to be xfered, and\r
// the MaxRecvdataSegmentLength on this connection.\r
//\r
@param[in] Lun The LUN the data will be sent to.\r
@param[in] Tcb The task control block.\r
\r
- @retval EFI_SUCCES The data is sent out to the LUN.\r
+ @retval EFI_SUCCESS The data is sent out to the LUN.\r
@retval EFI_OUT_OF_RESOURCES Failed to allocate memory.\r
@retval Others Other errors as indicated.\r
\r
@param[in] Tcb The task control block.\r
@param[in, out] Packet The EXT SCSI PASS THRU request packet.\r
\r
- @retval EFI_SUCCES The check on the Data IN PDU is passed and some update\r
+ @retval EFI_SUCCESS The check on the Data IN PDU is passed and some update\r
actions are taken.\r
- @retval EFI_PROTOCOL_ERROR Some kind of iSCSI protocol errror occurred.\r
+ @retval EFI_PROTOCOL_ERROR Some kind of iSCSI protocol error occurred.\r
@retval EFI_BAD_BUFFER_SIZEE The buffer was not the proper size for the request.\r
@retval Others Other errors as indicated.\r
\r
@param[in] Lun The Lun.\r
@param[in, out] Packet The EXT SCSI PASS THRU request packet.\r
\r
- @retval EFI_SUCCES The R2T PDU is valid and the solicited data is sent out.\r
- @retval EFI_PROTOCOL_ERROR Some kind of iSCSI protocol errror occurred.\r
+ @retval EFI_SUCCESS The R2T PDU is valid and the solicited data is sent out.\r
+ @retval EFI_PROTOCOL_ERROR Some kind of iSCSI protocol error occurred.\r
@retval Others Other errors as indicated.\r
\r
**/\r
@param[in] Tcb The task control block.\r
@param[in, out] Packet The EXT SCSI PASS THRU request packet.\r
\r
- @retval EFI_SUCCES The Response PDU is processed.\r
- @retval EFI_PROTOCOL_ERROR Some kind of iSCSI protocol errror occurred.\r
+ @retval EFI_SUCCESS The Response PDU is processed.\r
+ @retval EFI_PROTOCOL_ERROR Some kind of iSCSI protocol error occurred.\r
@retval EFI_BAD_BUFFER_SIZEE The buffer was not the proper size for the request.\r
@retval Others Other errors as indicated.\r
\r
@param[in] Pdu The NOP In PDU received.\r
@param[in] Tcb The task control block.\r
\r
- @retval EFI_SUCCES The NOP In PDU is processed and the related sequence\r
+ @retval EFI_SUCCESS The NOP In PDU is processed and the related sequence\r
numbers are updated.\r
- @retval EFI_PROTOCOL_ERROR Some kind of iSCSI protocol errror occurred.\r
+ @retval EFI_PROTOCOL_ERROR Some kind of iSCSI protocol error occurred.\r
\r
**/\r
EFI_STATUS\r
@param[in, out] Packet The request packet containing IO request, SCSI command\r
buffer and buffers to read/write.\r
\r
- @retval EFI_SUCCES The SCSI command is executed and the result is updated to\r
+ @retval EFI_SUCCESS The SCSI command is executed and the result is updated to\r
the Packet.\r
@retval EFI_DEVICE_ERROR Session state was not as required.\r
@retval EFI_OUT_OF_RESOURCES Failed to allocate memory.\r