3.2.5.5.3 Receiving a Status Request for a Prior Operation

When the server receives a request with OperationCode equal to RSVD_TUNNEL_SRB_STATUS_OPERATION, the request handling proceeds as follows:

If MaxOutputResponse is less than 40 (size of SVHDX_TUNNEL_OPERATION_HEADER + size of SVHDX_TUNNEL_SRB_STATUS_RESPONSE), the server MUST fail the request with STATUS_INVALID_PARAMETER.

If SenseInfoExLength field of the request is not equal to the size of the SenseDataEx, the server MUST fail the request with STATUS_INVALID_PARAMETER.

The server MUST locate the SenseError in Open.SenseErrorDataList where SenseError.StatusKey matches the StatusKey of the request.

If SenseError is not found, the server MUST return STATUS_SVHDX_ERROR_NOT_AVAILABLE.

If SenseError is found, the server MUST construct the SVHDX_TUNNEL_SRB_STATUS_RESPONSE structure as specified in section 2.2.4.4 with the following values:

The SVHDX_TUNNEL_OPERATION_HEADER MUST be initialized as follows:

  • The OperationCode field MUST be set to the OperationCode value of the request.

  • The Status field MUST be set to STATUS_SUCCESS.

  • The RequestId field MUST be set to the value received in the request.

The SVHDX_TUNNEL_SRB_STATUS_RESPONSE packet is initialized as follows:

  • The StatusKey field MUST be set to the value received in the request.

  • The SenseInfoAutoGenerated field MUST be set to the value received from the virtual SCSI disk.

  • The SrbStatus field MUST be set to SenseError.SrbStatus.

  • The ScsiStatus field MUST be set to SenseError.ScsiStatus.

  • The SenseInfoExLength field SHOULD<16> be set to the length of the SenseError.SenseData, in bytes.

  • The SenseDataEx field MUST be set to SenseError.SenseData.

The response MUST be sent to the client.