sg_opcodes - report supported SCSI commands or task management
functions
sg_opcodes [--alpha] [--compact]
[--enumerate] [--help] [--hex] [--mask]
[--mlu] [--no-inquiry] [--opcode=OP[,SA]]
[--pdt=DT] [--raw] [--rctd] [--repd]
[--sa=SA] [--tmf] [--unsorted] [--verbose]
[--version] DEVICE
sg_opcodes [-a] [-c] [-e] [-H]
[-m] [-M] [-n] [-o=OP] [-p=DT]
[-q] [-R] [-s=SA] [-t] [-u] [-v]
[-V] [-?] DEVICE
This utility sends a SCSI REPORT SUPPORTED OPERATION CODES or a
REPORT SUPPORTED TASK MANAGEMENT FUNCTIONS command to the DEVICE and
then outputs the response. The default action is to report supported
operation codes. In this mode it will either list all supported commands or
give detailed information on a specific command identified by the
--opcode=OP option (perhaps with additional information from the
--sa=SA option).
The name of a SCSI command depends on its peripheral device type
(e.g. a disk). The REPORT SUPPORTED OPERATION CODES and REPORT SUPPORTED
TASK MANAGEMENT FUNCTIONS commands are not supported in the MMC command set
for CD and DVD devices. This utility does an INQUIRY to obtain the
peripheral device type and prints out the vendor, product and revision
strings.
A similar facility to query supported operation codes previously
was available via the CmdDt bit in the SCSI INQUIRY command (see sg_inq(8)).
However that facility was made obsolete and replaced by the REPORT SUPPORTED
OPERATION CODES command in SPC-3 (revision 4) during February 2002.
This utility supports two command line syntaxes, the preferred one
is shown first in the synopsis and explained in this section. A later
section on the old command line syntax outlines the second group of
options.
Arguments to long options are mandatory for short options as
well.
- -a, --alpha
- when all supported commands are being listed there is no requirement for
the device server (i.e. the DEVICE) to sort the list of commands.
When this option is given the list of supported commands is sorted by name
(alphabetically). When this option and the --unsorted option are
both _not_ given then the list of supported commands is sorted numerically
(first by operation code and then by service action).
- -c, --compact
- some command names, especially those associated with some service actions,
are getting longer. This may cause line wrap in the one line per command
mode on some terminals. When this option is given the opcode and service
action fields are combined into a single field with the service action,
prefixed by a comma shown directly after the opcode. If there is no
service action associated with the command, then the comma and the service
action are not shown after the opcode. The CDB size field is not shown
when this option is given.
- -e,
--enumerate
- this option prints the name of the SCSI command based on the given opcode,
peripheral device type and optionally the service action. If given,
DEVICE is ignored. The opcode, peripheral device type and service
action default to zero if not given. Thus if this option is the only
option given then "Test Unit ready" is output since its opcode
is 0, it has no service action and it is common to all peripheral device
types since it is defined in the SCSI Primary Commands (SPC)
standard(s).
- -h, --help
- outputs the usage message summarizing command line options then exits.
Ignores DEVICE if given.
- -H, --hex
- outputs the response in ASCII hexadecimal to stdout.
- -m, --mask
- additionally prints out the cdb mask in hex. So a 12 byte cdb will have a
12 byte hexadecimal mask. If the hexadecimal is expanded (mentally) to
binary then a "1" means the corresponding position in the cdb
may be set. And "0" means the corresponding position in the cdb
must not be set. For "0" mask positions that a user tries to set
in a cdb, the device may either ignore it or report an error, typically
with a sense key of "illegal request".
- -M, --mlu
- additionally prints out an indication (0 or 1) whether the command effects
all logical units in the containing target. MLU (Multiple Logical Units)
is a bit in the REPORT SUPPORTED OPERATION CODES response introduced by
proposal 18-045r1 (and possibly in spc5r20). Without the option, the
default output format which lists all opcodes, does not include a MLU
indication.
- -n,
--no-inquiry
- Prior to calling a SCSI REPORT SUPPORTED OPERATION CODES or a REPORT
SUPPORTED TASK MANAGEMENT FUNCTIONS command, a SCSI INQUIRY command is
performed. The reason is to determine the peripheral device type (pdt) of
the DEVICE as this is helpful in translating operation codes to the
command names. By default this utility prints a summary of INQUIRY command
response on stdout. If this option (or the --raw option) is given
then that summary is not printed on stdout.
- -O, --old
- Switch to older style options. Please use as first option.
- -o,
--opcode=OP[,SA]
- the DEVICE will be queried for the given operation code (i.e. the
OP value) which is the first byte of a SCSI command. Optionally, if
a SA value is given, it will be used as that SCSI command's service
action. Note that OP and OP,0 are not the same thing, as
SCSI does allow the service action to be 0 (but it is not comman).
OP and SA are decimal unless prefixed by "0x" or
they have a trailing "h". OP should be in the range 0 to
255 (0xff) inclusive. SA should be in the range 0 to 65535 (0xffff)
inclusive. When this option is not given then all available SCSI commands
supported by the DEVICE are listed.
- -p,
--pdt=DT
- where DT is the peripheral device type. This is used together with
the --enumerate to differentiate when a command opcode (and perhaps
service action) is shared by multiple device types.
This option may also be used with the --no-inquiry option to suppress
this utility doing an INQUIRY command since the main reason for doing that
is to find the peripheral device type of the DEVICE.
- -r, --raw
- output the response in binary to stdout. Error messages and warnings, if
any, are sent to stderr.
- -R, --rctd
- set report command timeout descriptor (RCTD) bit in the cdb. The response
may or may not contain command timeout descriptors. If available they are
output. If supported there are two values: a nominal command timeout and a
recommended command timeout. Both have units of seconds. A value of zero
means that no timeout is indicated and this is shown in the corresponding
decoded output as "-".
- -q, --repd
- set read extended parameter data (REPD) bit in the report task management
functions cdb. 16 bytes rather than the default 4 bytes expected in the
response. This was added in SPC-4 (revision 26).
- -s,
--sa=SA
- the DEVICE will be queried for a command with the given service
action (i.e. the SA value). Used in conjunction with the
--opcode=OP option. If this option is not given, --opcode=OP
is given and the command in question does have a service action then a
value of 0 will be assumed. SA is decimal and expected to be in the
range 0 to 65535 (0xffff) inclusive.
- -t, --tmf
- list supported task management functions. This is done with the SCSI
REPORT SUPPORTED TASK MANAGEMENT FUNCTIONS command. When this option is
chosen the --alpha, --opcode=OP, --rctd,
--sa=SA and --unsorted options are ignored.
- -u,
--unsorted
- when all supported commands are being listed there is no requirement for
the device server (i.e. the DEVICE) to sort the list of commands.
When this option is given the list of supported commands is in the order
given by the DEVICE. When this option is not given the supported
commands are sorted numerically (first by operation code and then by
service action).
- -v, --verbose
- increase level of verbosity. Can be used multiple times.
- -V, --version
- print out version string then exit.
As of SPC-5 revision 8 the recognized task management functions
are: abort set, abort task set, clear ACA, clear task set, logical unit
reset, query task, query asynchronous event, query task set, and I_T nexus
reset. In SPC-4 revision 26 target reset and wakeup task management
functions were made obsolete.
In the 2.4 series of Linux kernels the DEVICE must be a
SCSI generic (sg) device. In the 2.6 series block devices (e.g. SCSI disks
and DVD drives) can also be specified. For example "sg_opcodes
/dev/sda" will work in the 2.6 series kernels.
The exit status of sg_opcodes is 0 when it is successful.
Otherwise see the sg3_utils(8) man page.
The options in this section were the only ones available prior to
sg3_utils version 1.23 . Since then this utility defaults to the newer
command line options which can be overridden by using --old (or
-O) as the first option. See the ENVIRONMENT VARIABLES section for
another way to force the use of these older command line options.
- -a
- sort command alphabetically. Equivalent to --alpha in main
description.
- -c
- see the --compact option above.
- -e
- see the --enumerate option above.
- -H
- see the --hex option above.
- -m
- see the --mask option above.
- -n
- don't print a summary of the SCSI INQUIRY response on stdout.
- -N, --new
- Switch to the newer style options.
- -o=OP
- the DEVICE will be queried for the given operation code (i.e.
OP) which is the first byte of a SCSI command. OP is
hexadecimal and expected to be in the range 0 to ff inclusive. When this
option is not given then all available SCSI commands supported by the
DEVICE are listed.
- -p=DT
- see the --pdt=DT option above.
- -q
- set the read extended parameter data (REPD) bit in report TMF cdb.
Equivalent to --repd in main description.
- -R
- set the report command timeout descriptor (RCTD) bit in cdb. Equivalent to
--rctd in main description.
- -s=SA
- the DEVICE will be queried for a command with the given service
action (i.e. SA). Used in conjunction with the -o=OP option.
If this option is not given, -o=OP is given and the command in
question does have a service action then a value of 0 will be assumed.
SA is hexadecimal and expected to be in the range 0 to ffff
inclusive.
- -t
- list supported task management functions. Equivalent to --tmf in
the main description.
- -u
- output all supported commands in the order given by DEVICE.
Equivalent to --unsorted in main description.
- -v
- increase level of verbosity. Can be used multiple times.
- -V
- print out version string then exit.
- -?
- output usage message. Ignore all other parameters.
The examples in this page use Linux device names. For suitable
device names in other supported Operating Systems see the sg3_utils(8) man
page.
To see the information about a specific command give its operation
code to the '--op=' option. A command line invocation is shown first
followed by a typical response:
# sg_opcodes --op=93h /dev/sdb
Opcode=0x93
Command_name: Write same(16)
Command supported [conforming to SCSI standard]
Usage data: 93 e2 00 00 00 00 ff ff ff ff 00 00 ff ff 00 00
The next example shows the supported task management
functions:
# sg_opcodes --tmf -n /dev/sdb
Task Management Functions supported by device:
Abort task
Abort task set
Clear ACA
Clear task set
Logical unit reset
Query task
Enumerate can be used to look up a SCSI command name in the
absence of a device that supports that command. The opcode and service
action (if required) should be supplied:
# sg_opcodes --enumerate --op=0x9b,0xa
SCSI command:
Read buffer(16), read data from echo buffer
Since sg3_utils version 1.23 the environment variable
SG3_UTILS_OLD_OPTS can be given. When it is present this utility will expect
the older command line options. So the presence of this environment variable
is equivalent to using --old (or -O) as the first command line
option.
Written by Douglas Gilbert
Report bugs to <dgilbert at interlog dot com>.
Copyright © 2004-2021 Douglas Gilbert
This software is distributed under the GPL version 2. There is NO warranty;
not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.