Files
gotgt/docs/SCSI_COMMANDS.md
2026-03-14 11:45:35 +08:00

8.5 KiB

SCSI Commands Support

This document lists all SCSI commands supported by gotgt iSCSI target implementation.

Overview

gotgt implements SCSI Primary Commands (SPC-3/4) and SCSI Block Commands (SBC-2/3) to provide a complete iSCSI target solution for block storage devices.

Supported SCSI Commands

SPC Commands (Primary Commands)

Opcode Command Name Description Status
0x00 TEST UNIT READY Check if device is ready Supported
0x03 REQUEST SENSE Request sense data Supported
0x12 INQUIRY Get device information Supported
0x1A MODE SENSE (6) Get device parameters Supported
0x5A MODE SENSE (10) Get device parameters Supported
0x15 MODE SELECT (6) Set device parameters Supported
0x55 MODE SELECT (10) Set device parameters Supported
0x1B START STOP UNIT Control device power state Supported
0x1E PREVENT ALLOW MEDIUM REMOVAL Control media removal Supported
0xA0 REPORT LUNS Report LUN inventory Supported
0x1D SEND DIAGNOSTIC Run diagnostics Supported
0x5E PERSISTENT RESERVE IN Read reservation info Supported
0x5F PERSISTENT RESERVE OUT Modify reservations Supported
0xA3 MAINTENANCE IN Maintenance commands Supported (Report Supported Operation Codes)

SBC Commands (Block Commands)

Opcode Command Name Description Status
0x08 READ (6) Read data (21-bit LBA) Supported
0x28 READ (10) Read data (32-bit LBA) Supported
0xA8 READ (12) Read data (32-bit LBA) Supported
0x88 READ (16) Read data (64-bit LBA) Supported
0x0A WRITE (6) Write data (21-bit LBA) Supported
0x2A WRITE (10) Write data (32-bit LBA) Supported
0xAA WRITE (12) Write data (32-bit LBA) Supported
0x8A WRITE (16) Write data (64-bit LBA) Supported
0x2E WRITE AND VERIFY (10) Write and verify Supported
0xAE WRITE AND VERIFY (12) Write and verify Supported
0x8E WRITE AND VERIFY (16) Write and verify Supported
0x41 WRITE SAME (10) Write same pattern Supported
0x93 WRITE SAME (16) Write same pattern Supported
0x8B ORWRITE (16) OR write operation Supported
0x89 COMPARE AND WRITE Atomic compare and write Supported
0x25 READ CAPACITY (10) Get device capacity Supported
0x9E SERVICE ACTION IN (16) Read capacity (16) Supported
0x2F VERIFY (10) Verify data integrity Supported
0xAF VERIFY (12) Verify data integrity Supported
0x8F VERIFY (16) Verify data integrity Supported
0x34 PRE-FETCH (10) Cache data Supported
0x90 PRE-FETCH (16) Cache data Supported
0x35 SYNCHRONIZE CACHE (10) Flush cache Supported
0x91 SYNCHRONIZE CACHE (16) Flush cache Supported
0x42 UNMAP Deallocate blocks Supported
0x04 FORMAT UNIT Format media Supported
0x16 RESERVE (6) Reserve device Supported
0x17 RELEASE (6) Release device Supported

Persistent Reservation Service Actions

PR IN Service Actions

Service Action Name Description Status
0x00 READ KEYS Read reservation keys Supported
0x01 READ RESERVATION Read current reservation Supported
0x02 REPORT CAPABILITIES Report PR capabilities Supported

PR OUT Service Actions

Service Action Name Description Status
0x00 REGISTER Register reservation key Supported
0x01 RESERVE Reserve device Supported
0x02 RELEASE Release reservation Supported
0x03 CLEAR Clear all reservations Supported
0x04 PREEMPT Preempt reservation Supported
0x06 REGISTER AND IGNORE EXISTING KEY Register new key Supported
0x07 REGISTER AND MOVE Register and move Supported

Supported VPD Pages

The INQUIRY command supports the following Vital Product Data (VPD) pages:

Page Code Name Description Status
0x00 Supported VPD Pages List of supported VPD pages Supported
0x80 Unit Serial Number Device serial number Supported
0x83 Device Identification Device identifiers Supported
0xB0 Block Limits Block device limits Supported
0xB2 Logical Block Provisioning Thin provisioning info Supported

Supported Mode Pages

The MODE SENSE command supports the following mode pages:

Page Code Name Description Status
0x02 Disconnect-Reconnect Disconnect/reconnect parameters Supported
0x08 Caching Cache control parameters Supported
0x0A Control Control mode parameters Supported
0x0A/0x01 Control Extension Extended control parameters Supported
0x1C Informational Exceptions SMART control parameters Supported

iSCSI Protocol Features

Feature Description Status
Login Authentication CHAP authentication Supported
Multiple Connections Multiple TCP connections per session Supported
Header Digest CRC32C header integrity Supported
Data Digest CRC32C data integrity Supported
Immediate Data Immediate data delivery Supported
Unsolicited Data Unsolicited data-out PDUs Supported
Error Recovery Level Error recovery mechanisms Level 0 Supported

Tested with libiscsi

All commands have been tested with the libiscsi test suite. The following test categories are fully supported:

  • Inquiry commands (including EVPD handling)
  • Read operations (6/10/12/16 byte CDBs)
  • Write operations (6/10/12/16 byte CDBs)
  • Write and Verify operations
  • Verify operations
  • Capacity reporting
  • Mode Sense/Select operations
  • Persistent Reservation operations
  • Unmap/Trim operations
  • Synchronize Cache operations
  • iSCSI protocol compliance

Test Results

Total Tests: 38
Passed: 38
Failed: 0
Pass Rate: 100%

Tested with libiscsi test suite covering all major SCSI command categories.

Recent Fixes

Bug Fix: SCSICDBBufXLength Function (2025-03-10)

Fixed incorrect Allocation Length calculation for 6-byte CDB commands:

  1. INQUIRY (0x12) and REQUEST_SENSE (0x03): Use bytes 3-4 for Allocation Length
  2. Other Group 0 commands (READ_6, WRITE_6, etc.): Return ok=false since these commands don't have Allocation Length field in their CDB. This prevents incorrect truncation of sense data buffer.

Bug Fix: CDB Group ID Comparison (2025-03-10)

Fixed incorrect comparison between CDB length constants and group IDs:

  • Original: Used CDB length constants (6, 10, 12, 16) which were incorrect
  • Fixed: Use actual group IDs (0-7) for switch statement

Bug Fix: PERSISTENT_RESERVE_IN/OUT (0x5E/0x5F) (2025-03-10)

Fixed Allocation Length position for these commands:

  • Use bytes 6-7 instead of bytes 7-8
  • Added manual BigEndian conversion for correct byte order

Notes

Block Device Characteristics VPD Page (0xB1)

This VPD page is currently not supported. The INQUIRY command will return a CHECK CONDITION status with ILLEGAL_REQUEST sense key when this page is requested. This is expected behavior and does not affect normal operations.

Persistent Reservations

  • All standard reservation types are supported: Write Exclusive, Exclusive Access, and their variants with registrants only.
  • Reservation scopes: LU (Logical Unit) scope is supported.
  • Persistent reservation operations require proper key registration before use.

Thin Provisioning

  • UNMAP command is fully supported for thin-provisioned LUNs.
  • Logical Block Provisioning VPD page (0xB2) reports thin provisioning capabilities.

Version Information

  • SPC Version: SPC-3 (with some SPC-4 features)
  • SBC Version: SBC-2 (with some SBC-3 features)
  • iSCSI Protocol: RFC 3720 compliant

References