Provided by: sg3-utils_1.48-0ubuntu1_amd64 bug

NAME

       sg_opcodes - report supported SCSI commands or task management functions

SYNOPSIS

       sg_opcodes    [--alpha]   [--compact]   [--enumerate]   [--help]   [--hex]   [--inhex=FN]   [--json[=JO]]
       [--js-file=JFN] [--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] [-i=FN] [-j] [-m] [-M] [-n] [-o=OP] [-p=DT] [-q] [-R] [-s=SA] [-t] [-u]
       [-v] [-V] [-?] DEVICE

DESCRIPTION

       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.

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. When used once or twice, each line starts
              with a relative (hex) address starting at 0 on the first hex line output. The difference  is  when
              used  twice  the  hexadecimal bytes are rendered in ASCII at the right of each line; non-printable
              characters are replaced by "." .
              When used three or more times, there is no leading relative address on each line. This  output  is
              suitable for being redirected to a file which can later by given to the --inhex=FN option.

       -i, --inhex=FN
              where  FN  is  a  file  name whose contents are assumed to be ASCII hexadecimal. If DEVICE is also
              given then DEVICE is ignored, a warning is issued and the utility  continues,  decoding  the  file
              named  FN.  See  the  "HEX,  BINARY  AND  JSON  FORMATS" section in the sg3_utils manpage for more
              information. If the --raw option is also given then the contents of FN are treated as binary.

       -j[=JO], --json[=JO]
              output is in JSON format instead of plain text form. Note that arguments to  the  short  and  long
              form  are  themselves optional and if present start with "=" and no whitespace is permitted around
              that "=".
              See sg3_utils_json manpage or use '?' for JO to get a summary.

       -J, --js-file=JFN
              output is in JSON format and it is sent to a file named JFN.  If  that  file  exists  then  it  is
              truncated. By default, the JSON output is sent to stdout.
              When  this  option  is  given,  the  --json[=JO]  option  is  implied  and  need not be given. The
              --json[=JO] option may still be needed to set the JO parameter to non-default values.

       -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 not in this command). 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.
              Numerical values between -1 and 31 (inclusive) may be used where -1 implies what is in SPC.  Names
              like 'tape', 'disk' and 'processor' may also be given.
              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 response in binary (to stdout) unless the --inhex=FN option is also given. In that case the
              input file name (FN) is decoded as binary (and the output is _not_ in binary (but may be hex)).

       -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.

NOTES

       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.

EXIT STATUS

       The exit status of sg_opcodes is 0 when it is successful. Otherwise see the sg3_utils(8) man page.

OLDER COMMAND LINE OPTIONS

       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.

EXAMPLES

       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

ENVIRONMENT VARIABLES

       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.

AUTHOR

       Written by Douglas Gilbert

REPORTING BUGS

       Report bugs to <dgilbert at interlog dot com>.

COPYRIGHT

       Copyright © 2004-2023 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.

SEE ALSO

       sg_inq,sg3_utils_json(sg3_utils)

sg3_utils-1.48                                      June 2023                                      SG_OPCODES(8)