]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/IScsiDxe/IScsiProto.c
MdeModulePkg IScsiDxe: Remove a redundant function
[mirror_edk2.git] / MdeModulePkg / Universal / Network / IScsiDxe / IScsiProto.c
index 2261bc17f0216cd3e018846d00c82b60c965cb00..b4a5c2d024139f9d6b0b89467d14ab1b78af964b 100644 (file)
@@ -1,8 +1,8 @@
 /** @file\r
   The implementation of iSCSI protocol based on RFC3720.\r
 \r
-Copyright (c) 2004 - 2010, Intel Corporation.<BR>\r
-All rights reserved. This program and the accompanying materials\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
@@ -17,7 +17,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 UINT32 mDataSegPad = 0;\r
 \r
 /**\r
-  Attach the iSCSI connection to the iSCSI session. \r
+  Attach the iSCSI connection to the iSCSI session.\r
 \r
   @param[in, out]  Session The iSCSI session.\r
   @param[in, out]  Conn    The iSCSI connection.\r
@@ -34,7 +34,7 @@ IScsiAttatchConnection (
 }\r
 \r
 /**\r
-  Detach the iSCSI connection from the session it belongs to. \r
+  Detach the iSCSI connection from the session it belongs to.\r
 \r
   @param[in, out]  Conn The iSCSI connection.\r
 **/\r
@@ -49,7 +49,7 @@ IScsiDetatchConnection (
 }\r
 \r
 /**\r
-  Check the sequence number according to RFC3720. \r
+  Check the sequence number according to RFC3720.\r
 \r
   @param[in, out]  ExpSN   The currently expected sequence number.\r
   @param[in]       NewSN   The sequence number to check.\r
@@ -116,7 +116,7 @@ IScsiUpdateCmdSN (
 \r
   @retval EFI_SUCCESS        The iSCSI connection is logged into the iSCSI target.\r
   @retval EFI_TIMEOUT        Timeout happened during the login procedure.\r
-  @retval Others             Other errors as indicated.  \r
+  @retval Others             Other errors as indicated.\r
 **/\r
 EFI_STATUS\r
 IScsiConnLogin (\r
@@ -289,19 +289,24 @@ IScsiSessionLogin (
   ISCSI_SESSION     *Session;\r
   ISCSI_CONNECTION  *Conn;\r
   EFI_TCP4_PROTOCOL *Tcp4;\r
-  BOOLEAN           MediaPresent;\r
+  EFI_STATUS        MediaStatus;\r
 \r
   Session = &Private->Session;\r
 \r
   //\r
   // Check media status before session login\r
   //\r
-  MediaPresent = TRUE;\r
-  NetLibDetectMedia (Private->Controller, &MediaPresent);\r
-  if (!MediaPresent) {\r
+  MediaStatus = EFI_SUCCESS;\r
+  NetLibDetectMediaWaitTimeout (Private->Controller, ISCSI_CHECK_MEDIA_LOGIN_WAITING_TIME, &MediaStatus);\r
+  if (MediaStatus != EFI_SUCCESS) {\r
     return EFI_NO_MEDIA;\r
   }\r
 \r
+  //\r
+  // Set session identifier\r
+  //\r
+  CopyMem (Session->Isid, Session->ConfigData.NvData.IsId, 6);\r
+\r
   //\r
   // Create a connection for the session.\r
   //\r
@@ -376,7 +381,7 @@ IScsiSendLoginReq (
   Receive and process the iSCSI login response.\r
 \r
   @param[in]  Conn             The connection in the iSCSI login phase.\r
-  \r
+\r
   @retval EFI_SUCCESS          The iSCSI login response PDU is received and processed.\r
   @retval Others               Other errors as indicated.\r
 **/\r
@@ -388,6 +393,8 @@ IScsiReceiveLoginRsp (
   EFI_STATUS  Status;\r
   NET_BUF     *Pdu;\r
 \r
+  Pdu = NULL;\r
+\r
   //\r
   // Receive the iSCSI login response.\r
   //\r
@@ -398,6 +405,7 @@ IScsiReceiveLoginRsp (
   //\r
   // A Login Response is received, process it.\r
   //\r
+  ASSERT (Pdu != NULL);\r
   Status = IScsiProcessLoginRsp (Conn, Pdu);\r
 \r
   NetbufFree (Pdu);\r
@@ -435,6 +443,9 @@ IScsiAddKeyValuePair (
   CHAR8               *Data;\r
 \r
   LoginReq    = (ISCSI_LOGIN_REQUEST *) NetbufGetByte (Pdu, 0, NULL);\r
+  if (LoginReq == NULL) {\r
+    return EFI_PROTOCOL_ERROR;\r
+  }\r
   DataSegLen  = NTOH24 (LoginReq->DataSegmentLength);\r
 \r
   KeyLen      = (UINT32) AsciiStrLen (Key);\r
@@ -601,6 +612,9 @@ IScsiProcessLoginRsp (
   Session   = Conn->Session;\r
 \r
   LoginRsp  = (ISCSI_LOGIN_RESPONSE *) NetbufGetByte (Pdu, 0, NULL);\r
+  if (LoginRsp == NULL) {\r
+    return EFI_PROTOCOL_ERROR;\r
+  }\r
   if (!ISCSI_CHECK_OPCODE (LoginRsp, ISCSI_OPCODE_LOGIN_RSP)) {\r
     //\r
     // It's not a Login Response\r
@@ -687,6 +701,14 @@ IScsiProcessLoginRsp (
   LoginRsp->MaxCmdSN  = NTOHL (LoginRsp->MaxCmdSN);\r
 \r
   if ((Conn->CurrentStage == ISCSI_SECURITY_NEGOTIATION) && (Conn->CHAPStep == ISCSI_CHAP_INITIAL)) {\r
+    //\r
+    // If the Login Request is a leading Login Request, the target MUST use\r
+    // the value presented in CmdSN as the target value for ExpCmdSN.\r
+    //\r
+    if ((Session->State == SESSION_STATE_FREE) && (Session->CmdSN != LoginRsp->ExpCmdSN)) {\r
+      return EFI_PROTOCOL_ERROR;\r
+    }\r
+\r
     //\r
     // It's the initial Login Response, initialize the local ExpStatSN, MaxCmdSN\r
     // and ExpCmdSN.\r
@@ -785,7 +807,7 @@ IScsiProcessLoginRsp (
   @param[in]      Data         The data segment which should contain the\r
                                TargetAddress key-value list.\r
   @param[in]      Len          Length of the data.\r
-  \r
+\r
   @retval EFI_SUCCESS          The target address is updated.\r
   @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.\r
   @retval EFI_NOT_FOUND        The TargetAddress key is not found.\r
@@ -880,6 +902,7 @@ IScsiUpdateTargetAddress (
   @param[in]  Arg The opaque parameter.\r
 **/\r
 VOID\r
+EFIAPI\r
 IScsiFreeNbufList (\r
   VOID *Arg\r
   )\r
@@ -896,6 +919,7 @@ IScsiFreeNbufList (
   @param[in]   Arg  The opaque parameter.\r
 **/\r
 VOID\r
+EFIAPI\r
 IScsiNbufExtFree (\r
   VOID *Arg\r
   )\r
@@ -1201,12 +1225,14 @@ IScsiCheckOpParams (
   //\r
   // InitialR2T, result function is OR.\r
   //\r
-  Value = IScsiGetValueByKeyFromList (KeyValueList, ISCSI_KEY_INITIAL_R2T);\r
-  if (Value == NULL) {\r
-    goto ON_ERROR;\r
-  }\r
+  if (!Session->InitialR2T) {\r
+    Value = IScsiGetValueByKeyFromList (KeyValueList, ISCSI_KEY_INITIAL_R2T);\r
+    if (Value == NULL) {\r
+      goto ON_ERROR;\r
+    }\r
 \r
-  Session->InitialR2T = (BOOLEAN) (Session->InitialR2T || (AsciiStrCmp (Value, "Yes") == 0));\r
+    Session->InitialR2T = (BOOLEAN) (AsciiStrCmp (Value, "Yes") == 0);\r
+  }\r
 \r
   //\r
   // ImmediateData, result function is AND.\r
@@ -1216,7 +1242,7 @@ IScsiCheckOpParams (
     goto ON_ERROR;\r
   }\r
 \r
-  Session->ImmediateData = (BOOLEAN) (Session->ImmediateData && (AsciiStrCmp (Value, "Yes") == 0));\r
+  Session->ImmediateData = (BOOLEAN) (Session->ImmediateData && (BOOLEAN) (AsciiStrCmp (Value, "Yes") == 0));\r
 \r
   //\r
   // MaxRecvDataSegmentLength is declarative.\r
@@ -1241,13 +1267,15 @@ IScsiCheckOpParams (
   // ImmediateData=No.\r
   // This Key/Value is negotiation type.\r
   //\r
-  Value = IScsiGetValueByKeyFromList (KeyValueList, ISCSI_KEY_FIRST_BURST_LENGTH);\r
-  if (Value == NULL) {\r
-    goto ON_ERROR;\r
-  }\r
+  if (!(Session->InitialR2T && !Session->ImmediateData)) {\r
+    Value = IScsiGetValueByKeyFromList (KeyValueList, ISCSI_KEY_FIRST_BURST_LENGTH);\r
+    if (Value == NULL) {\r
+      goto ON_ERROR;\r
+    }\r
 \r
-  NumericValue              = AsciiStrDecimalToUintn (Value);\r
-  Session->FirstBurstLength = (UINT32) MIN (Session->FirstBurstLength, NumericValue);\r
+    NumericValue              = AsciiStrDecimalToUintn (Value);\r
+    Session->FirstBurstLength = (UINT32) MIN (Session->FirstBurstLength, NumericValue);\r
+  }\r
 \r
   //\r
   // MaxConnections, result function is Minimum.\r
@@ -1267,22 +1295,26 @@ IScsiCheckOpParams (
   //\r
   // DataPDUInOrder, result function is OR.\r
   //\r
-  Value = IScsiGetValueByKeyFromList (KeyValueList, ISCSI_KEY_DATA_PDU_IN_ORDER);\r
-  if (Value == NULL) {\r
-    goto ON_ERROR;\r
-  }\r
+  if (!Session->DataPDUInOrder) {\r
+    Value = IScsiGetValueByKeyFromList (KeyValueList, ISCSI_KEY_DATA_PDU_IN_ORDER);\r
+    if (Value == NULL) {\r
+      goto ON_ERROR;\r
+    }\r
 \r
-  Session->DataPDUInOrder = (BOOLEAN) (Session->DataPDUInOrder || (AsciiStrCmp (Value, "Yes") == 0));\r
+    Session->DataPDUInOrder = (BOOLEAN) (AsciiStrCmp (Value, "Yes") == 0);\r
+  }\r
 \r
   //\r
   // DataSequenceInorder, result function is OR.\r
   //\r
-  Value = IScsiGetValueByKeyFromList (KeyValueList, ISCSI_KEY_DATA_SEQUENCE_IN_ORDER);\r
-  if (Value == NULL) {\r
-    goto ON_ERROR;\r
-  }\r
+  if (!Session->DataSequenceInOrder) {\r
+    Value = IScsiGetValueByKeyFromList (KeyValueList, ISCSI_KEY_DATA_SEQUENCE_IN_ORDER);\r
+    if (Value == NULL) {\r
+      goto ON_ERROR;\r
+    }\r
 \r
-  Session->DataSequenceInOrder = (BOOLEAN) (Session->DataSequenceInOrder || (AsciiStrCmp (Value, "Yes") == 0));\r
+    Session->DataSequenceInOrder = (BOOLEAN) (AsciiStrCmp (Value, "Yes") == 0);\r
+  }\r
 \r
   //\r
   // DefaultTime2Wait, result function is Maximum.\r
@@ -1332,11 +1364,24 @@ IScsiCheckOpParams (
   Session->MaxOutstandingR2T = (UINT16) MIN (Session->MaxOutstandingR2T, NumericValue);\r
 \r
   //\r
-  // Remove declarative key-value paris if any.\r
+  // Remove declarative key-value pairs, if any.\r
   //\r
   IScsiGetValueByKeyFromList (KeyValueList, ISCSI_KEY_SESSION_TYPE);\r
   IScsiGetValueByKeyFromList (KeyValueList, ISCSI_KEY_TARGET_ALIAS);\r
   IScsiGetValueByKeyFromList (KeyValueList, ISCSI_KEY_TARGET_PORTAL_GROUP_TAG);\r
+  //\r
+  // Remove the key-value that may not needed for result function is OR.\r
+  //\r
+  IScsiGetValueByKeyFromList (KeyValueList, ISCSI_KEY_INITIAL_R2T);\r
+  IScsiGetValueByKeyFromList (KeyValueList, ISCSI_KEY_DATA_PDU_IN_ORDER);\r
+  IScsiGetValueByKeyFromList (KeyValueList, ISCSI_KEY_DATA_SEQUENCE_IN_ORDER);\r
+\r
+  //\r
+  // Remove irrelevant parameter, if any.\r
+  //\r
+  if (Session->InitialR2T && !Session->ImmediateData) {\r
+    IScsiGetValueByKeyFromList (KeyValueList, ISCSI_KEY_FIRST_BURST_LENGTH);\r
+  }\r
 \r
   if (IsListEmpty (KeyValueList)) {\r
     //\r
@@ -1693,37 +1738,6 @@ IScsiDelTcb (
   FreePool (Tcb);\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
-**/\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
-    Tcb = NULL;\r
-  }\r
-\r
-  return Tcb;\r
-}\r
 \r
 /**\r
   Create a data segment, pad it and calculate the CRC if needed.\r
@@ -1770,7 +1784,7 @@ IScsiNewDataSegment (
 \r
   @param[in]  Packet The EXT SCSI PASS THRU request packet containing the SCSI command.\r
   @param[in]  Lun    The LUN.\r
-  @param[in]  Tcb    The tcb assocated with this SCSI command.\r
+  @param[in]  Tcb    The tcb associated with this SCSI command.\r
 \r
   @return The  created iSCSI SCSI command PDU.\r
   @retval NULL Other errors as indicated.\r
@@ -1821,7 +1835,7 @@ IScsiNewScsiCmdPdu (
   if (ScsiCmd == NULL) {\r
     NetbufFree (PduHeader);\r
     return NULL;\r
-  }    \r
+  }\r
   Header  = (ISCSI_ADDITIONAL_HEADER *) (ScsiCmd + 1);\r
 \r
   ZeroMem (ScsiCmd, Length);\r
@@ -2054,6 +2068,7 @@ IScsiGenerateDataOutPduSequence (
   NET_BUF             *DataOutPdu;\r
   ISCSI_CONNECTION    *Conn;\r
   ISCSI_XFER_CONTEXT  *XferContext;\r
+  UINT8               *DataOutPacket;\r
 \r
   PduList = AllocatePool (sizeof (LIST_ENTRY));\r
   if (PduList == NULL) {\r
@@ -2097,7 +2112,14 @@ IScsiGenerateDataOutPduSequence (
   //\r
   // Set the F bit for the last data out PDU in this sequence.\r
   //\r
-  ISCSI_SET_FLAG (NetbufGetByte (DataOutPdu, 0, NULL), ISCSI_BHS_FLAG_FINAL);\r
+  DataOutPacket = NetbufGetByte (DataOutPdu, 0, NULL);\r
+  if (DataOutPacket == NULL) {\r
+    IScsiFreeNbufList (PduList);\r
+    PduList = NULL;\r
+    goto ON_EXIT;\r
+  }\r
+\r
+  ISCSI_SET_FLAG (DataOutPacket, ISCSI_BHS_FLAG_FINAL);\r
 \r
 ON_EXIT:\r
 \r
@@ -2178,6 +2200,9 @@ IScsiOnDataInRcvd (
   EFI_STATUS          Status;\r
 \r
   DataInHdr                   = (ISCSI_SCSI_DATA_IN *) NetbufGetByte (Pdu, 0, NULL);\r
+  if (DataInHdr == NULL) {\r
+    return EFI_PROTOCOL_ERROR;\r
+  }\r
 \r
   DataInHdr->InitiatorTaskTag = NTOHL (DataInHdr->InitiatorTaskTag);\r
   DataInHdr->ExpCmdSN         = NTOHL (DataInHdr->ExpCmdSN);\r
@@ -2266,6 +2291,9 @@ IScsiOnR2TRcvd (
   UINT8                   *Data;\r
 \r
   R2THdr = (ISCSI_READY_TO_TRANSFER *) NetbufGetByte (Pdu, 0, NULL);\r
+  if (R2THdr == NULL) {\r
+    return EFI_PROTOCOL_ERROR;\r
+  }\r
 \r
   R2THdr->InitiatorTaskTag = NTOHL (R2THdr->InitiatorTaskTag);\r
   R2THdr->TargetTransferTag = NTOHL (R2THdr->TargetTransferTag);\r
@@ -2329,6 +2357,9 @@ IScsiOnScsiRspRcvd (
   UINT32            DataSegLen;\r
 \r
   ScsiRspHdr                    = (SCSI_RESPONSE *) NetbufGetByte (Pdu, 0, NULL);\r
+  if (ScsiRspHdr == NULL) {\r
+    return EFI_PROTOCOL_ERROR;\r
+  }\r
 \r
   ScsiRspHdr->InitiatorTaskTag  = NTOHL (ScsiRspHdr->InitiatorTaskTag);\r
   if (ScsiRspHdr->InitiatorTaskTag != Tcb->InitiatorTaskTag) {\r
@@ -2391,6 +2422,9 @@ IScsiOnScsiRspRcvd (
   DataSegLen = ISCSI_GET_DATASEG_LEN (ScsiRspHdr);\r
   if (DataSegLen != 0) {\r
     SenseData               = (ISCSI_SENSE_DATA *) NetbufGetByte (Pdu, sizeof (SCSI_RESPONSE), NULL);\r
+    if (SenseData == NULL) {\r
+      return EFI_PROTOCOL_ERROR;\r
+    }\r
 \r
     SenseData->Length       = NTOHS (SenseData->Length);\r
 \r
@@ -2425,6 +2459,9 @@ IScsiOnNopInRcvd (
   EFI_STATUS    Status;\r
 \r
   NopInHdr            = (ISCSI_NOP_IN *) NetbufGetByte (Pdu, 0, NULL);\r
+  if (NopInHdr == NULL) {\r
+    return EFI_PROTOCOL_ERROR;\r
+  }\r
 \r
   NopInHdr->StatSN    = NTOHL (NopInHdr->StatSN);\r
   NopInHdr->ExpCmdSN  = NTOHL (NopInHdr->ExpCmdSN);\r
@@ -2454,11 +2491,12 @@ IScsiOnNopInRcvd (
   @param[in]       Lun       The LUN.\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
+\r
+  @retval EFI_SUCCES           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
+  @retval EFI_NOT_READY        The target can not accept new commands.\r
   @retval Others               Other errors as indicated.\r
 **/\r
 EFI_STATUS\r
@@ -2480,7 +2518,7 @@ IScsiExecuteScsiCommand (
   UINT8                   *Data;\r
   ISCSI_IN_BUFFER_CONTEXT InBufferContext;\r
   UINT64                  Timeout;\r
-  UINT8                   *Buffer;\r
+  UINT8                   *PduHdr;\r
 \r
   Private       = ISCSI_DRIVER_DATA_FROM_EXT_SCSI_PASS_THRU (PassThru);\r
   Session       = &Private->Session;\r
@@ -2490,7 +2528,8 @@ IScsiExecuteScsiCommand (
   Timeout       = 0;\r
 \r
   if (Session->State != SESSION_STATE_LOGGED_IN) {\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto ON_EXIT;\r
   }\r
 \r
   Conn = NET_LIST_USER_STRUCT_S (\r
@@ -2518,8 +2557,13 @@ IScsiExecuteScsiCommand (
   }\r
 \r
   XferContext         = &Tcb->XferContext;\r
-  Buffer              = NetbufGetByte (Pdu, 0, NULL);\r
-  XferContext->Offset = ISCSI_GET_DATASEG_LEN (Buffer);\r
+  PduHdr              = NetbufGetByte (Pdu, 0, NULL);\r
+  if (PduHdr == NULL) {\r
+    Status = EFI_PROTOCOL_ERROR;\r
+    NetbufFree (Pdu);\r
+    goto ON_EXIT;\r
+  }\r
+  XferContext->Offset = ISCSI_GET_DATASEG_LEN (PduHdr);\r
 \r
   //\r
   // Transmit the SCSI Command PDU.\r
@@ -2565,7 +2609,7 @@ IScsiExecuteScsiCommand (
       if (EFI_ERROR (Status)) {\r
         goto ON_EXIT;\r
       }\r
-      TimeoutEvent = Conn->TimeoutEvent; \r
+      TimeoutEvent = Conn->TimeoutEvent;\r
     }\r
     //\r
     // try to receive PDU from target.\r
@@ -2575,7 +2619,13 @@ IScsiExecuteScsiCommand (
       goto ON_EXIT;\r
     }\r
 \r
-    switch (ISCSI_GET_OPCODE (NetbufGetByte (Pdu, 0, NULL))) {\r
+    PduHdr = NetbufGetByte (Pdu, 0, NULL);\r
+    if (PduHdr == NULL) {\r
+      Status = EFI_PROTOCOL_ERROR;\r
+      NetbufFree (Pdu);\r
+      goto ON_EXIT;\r
+    }\r
+    switch (ISCSI_GET_OPCODE (PduHdr)) {\r
     case ISCSI_OPCODE_SCSI_DATA_IN:\r
       Status = IScsiOnDataInRcvd (Pdu, Tcb, Packet);\r
       break;\r
@@ -2622,15 +2672,6 @@ ON_EXIT:
     IScsiDelTcb (Tcb);\r
   }\r
 \r
-  if ((Status != EFI_SUCCESS) && (Status != EFI_NOT_READY)) {\r
-    //\r
-    // Reinstate the session.\r
-    //\r
-    if (EFI_ERROR (IScsiSessionReinstatement (Private))) {\r
-      Status = EFI_DEVICE_ERROR;\r
-    }\r
-  }\r
-\r
   return Status;\r
 }\r
 \r
@@ -2651,7 +2692,7 @@ IScsiSessionReinstatement (
   EFI_STATUS    Status;\r
 \r
   Session = &Private->Session;\r
-  ASSERT (Session->State == SESSION_STATE_LOGGED_IN);\r
+  ASSERT (Session->State != SESSION_STATE_FREE);\r
 \r
   //\r
   // Abort the session and re-init it.\r
@@ -2679,21 +2720,10 @@ IScsiSessionInit (
   IN BOOLEAN            Recovery\r
   )\r
 {\r
-  UINT32  Random;\r
-\r
   if (!Recovery) {\r
     Session->Signature  = ISCSI_SESSION_SIGNATURE;\r
     Session->State      = SESSION_STATE_FREE;\r
 \r
-    Random              = NET_RANDOM (NetRandomInitSeed ());\r
-\r
-    Session->Isid[0]    = ISID_BYTE_0;\r
-    Session->Isid[1]    = ISID_BYTE_1;\r
-    Session->Isid[2]    = ISID_BYTE_2;\r
-    Session->Isid[3]    = ISID_BYTE_3;\r
-    Session->Isid[4]    = (UINT8) Random;\r
-    Session->Isid[5]    = (UINT8) (Random >> 8);\r
-\r
     InitializeListHead (&Session->Conns);\r
     InitializeListHead (&Session->TcbList);\r
   }\r