| .TH SG_OPCODES "8" "September 2022" "sg3_utils\-1.48" SG3_UTILS |
| .SH NAME |
| sg_opcodes \- report supported SCSI commands or task management functions |
| .SH SYNOPSIS |
| .B sg_opcodes |
| [\fI\-\-alpha\fR] [\fI\-\-compact\fR] [\fI\-\-enumerate\fR] [\fI\-\-help\fR] |
| [\fI\-\-hex\fR] [\fI\-\-inhex=FN\fR] [\fI\-\-json[=JO]\fR] [\fI\-\-mask\fR] |
| [\fI\-\-mlu\fR] [\fI\-\-no-inquiry\fR] [\fI\-\-opcode=OP[,SA]\fR] |
| [\fI\-\-pdt=DT\fR] [\fI\-\-raw\fR] [\fI\-\-rctd\fR] [\fI\-\-repd\fR] |
| [\fI\-\-sa=SA\fR] [\fI\-\-tmf\fR] [\fI\-\-unsorted\fR] [\fI\-\-verbose\fR] |
| [\fI\-\-version\fR] \fIDEVICE\fR |
| .PP |
| .B sg_opcodes |
| [\fI\-a\fR] [\fI\-c\fR] [\fI\-e\fR] [\fI\-H\fR] [\fI\-i=FN\fR] [\fI\-j\fR] |
| [\fI\-m\fR] [\fI\-M\fR] [\fI\-n\fR] [\fI\-o=OP\fR] [\fI\-p=DT\fR] [\fI\-q\fR] |
| [\fI\-R\fR] [\fI\-s=SA\fR] [\fI\-t\fR] [\fI\-u\fR] [\fI\-v\fR] [\fI\-V\fR] |
| [\fI\-?\fR] \fIDEVICE\fR |
| .SH DESCRIPTION |
| .\" Add any additional description here |
| .PP |
| This utility sends a SCSI REPORT SUPPORTED OPERATION CODES or a REPORT |
| SUPPORTED TASK MANAGEMENT FUNCTIONS command to the \fIDEVICE\fR 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 |
| \fI\-\-opcode=OP\fR option (perhaps with additional information from the |
| \fI\-\-sa=SA\fR option). |
| .PP |
| 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. |
| .PP |
| 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. |
| .PP |
| 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. |
| .SH OPTIONS |
| Arguments to long options are mandatory for short options as well. |
| .TP |
| \fB\-a\fR, \fB\-\-alpha\fR |
| when all supported commands are being listed there is no requirement for |
| the device server (i.e. the \fIDEVICE\fR) 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 \fB\-\-unsorted\fR option are |
| both _not_ given then the list of supported commands is sorted |
| numerically (first by operation code and then by service action). |
| .TP |
| \fB\-c\fR, \fB\-\-compact\fR |
| 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. |
| .TP |
| \fB\-e\fR, \fB\-\-enumerate\fR |
| this option prints the name of the SCSI command based on the given opcode, |
| peripheral device type and optionally the service action. If given, |
| \fIDEVICE\fR 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). |
| .TP |
| \fB\-h\fR, \fB\-\-help\fR |
| outputs the usage message summarizing command line options |
| then exits. Ignores \fIDEVICE\fR if given. |
| .TP |
| \fB\-H\fR, \fB\-\-hex\fR |
| 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 "." . |
| .br |
| 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 \fI\-\-inhex=FN\fR option. |
| .TP |
| \fB\-i\fR, \fB\-\-inhex\fR=\fIFN\fR |
| where \fIFN\fR is a file name whose contents are assumed to be ASCII |
| hexadecimal. If \fIDEVICE\fR is also given then \fIDEVICE\fR is ignored, |
| a warning is issued and the utility continues, decoding the file named |
| \fIFN\fR. See the "FORMAT OF FILES CONTAINING ASCII HEX" section in the |
| sg3_utils manpage for more information. If the \fI\-\-raw\fR option is |
| also given then the contents of \fIFN\fR are treated as binary. |
| .TP |
| \fB\-j\fR, \fB\-\-json[\fR=\fIJO\fR] |
| output is in JSON format instead of human readable form. See sg3_utils_json |
| manpage or use '?' for \fIJO\fR for a summary. |
| .TP |
| \fB\-m\fR, \fB\-\-mask\fR |
| 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". |
| .TP |
| \fB\-M\fR, \fB\-\-mlu\fR |
| 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. |
| .TP |
| \fB\-n\fR, \fB\-\-no-inquiry\fR |
| 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 \fIDEVICE\fR 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 \fI\-\-raw\fR option) |
| is given then that summary is not printed on stdout. |
| .TP |
| \fB\-O\fR, \fB\-\-old\fR |
| Switch to older style options. Please use as first option. |
| .TP |
| \fB\-o\fR, \fB\-\-opcode\fR=\fIOP[,SA]\fR |
| the \fIDEVICE\fR will be queried for the given operation code (i.e. the |
| \fIOP\fR value) which is the first byte of a SCSI command. Optionally, if |
| a \fISA\fR value is given, it will be used as that SCSI command's service |
| action. Note that \fIOP\fR and \fIOP,0\fR are not the same thing, as SCSI |
| does allow the service action to be 0 (but not in this command). \fIOP\fR |
| and \fISA\fR are decimal unless prefixed by "0x" or they have a |
| trailing "h". \fIOP\fR should be in the range 0 to 255 (0xff) inclusive. |
| \fISA\fR should be in the range 0 to 65535 (0xffff) inclusive. When this |
| option is not given then all available SCSI commands supported by the |
| \fIDEVICE\fR are listed. |
| .TP |
| \fB\-p\fR, \fB\-\-pdt\fR=\fIDT\fR |
| where \fIDT\fR is the peripheral device type. This is used together with |
| the \fI\-\-enumerate\fR to differentiate when a command opcode (and perhaps |
| service action) is shared by multiple device types. |
| .br |
| This option may also be used with the \fI\-\-no-inquiry\fR 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 \fIDEVICE\fR. |
| .TP |
| \fB\-r\fR, \fB\-\-raw\fR |
| output response in binary (to stdout) unless the \fI\-\-inhex=FN\fR option |
| is also given. In that case the input file name (\fIFN\fR) is decoded as |
| binary (and the output is _not_ in binary (but may be hex)). |
| .TP |
| \fB\-R\fR, \fB\-\-rctd\fR |
| 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 "\-". |
| .TP |
| \fB\-q\fR, \fB\-\-repd\fR |
| 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). |
| .TP |
| \fB\-s\fR, \fB\-\-sa\fR=\fISA\fR |
| the \fIDEVICE\fR will be queried for a command with the given service |
| action (i.e. the \fISA\fR value). Used in conjunction with the |
| \fI\-\-opcode=OP\fR option. If this option is not given, \fI\-\-opcode=OP\fR |
| is given and the command in question does have a service action then a value |
| of 0 will be assumed. \fISA\fR is decimal and expected to be in the range 0 |
| to 65535 (0xffff) inclusive. |
| .TP |
| \fB\-t\fR, \fB\-\-tmf\fR |
| list supported task management functions. This is done with the SCSI REPORT |
| SUPPORTED TASK MANAGEMENT FUNCTIONS command. When this option is chosen |
| the \fI\-\-alpha\fR, \fI\-\-opcode=OP\fR, \fI\-\-rctd\fR, \fI\-\-sa=SA\fR |
| and \fI\-\-unsorted\fR options are ignored. |
| .TP |
| \fB\-u\fR, \fB\-\-unsorted\fR |
| when all supported commands are being listed there is no requirement for |
| the device server (i.e. the \fIDEVICE\fR) to sort the list of commands. When |
| this option is given the list of supported commands is in the order given by |
| the \fIDEVICE\fR. When this option is not given the supported commands |
| are sorted numerically (first by operation code and then by service action). |
| .TP |
| \fB\-v\fR, \fB\-\-verbose\fR |
| increase level of verbosity. Can be used multiple times. |
| .TP |
| \fB\-V\fR, \fB\-\-version\fR |
| print out version string then exit. |
| .SH 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. |
| .PP |
| In the 2.4 series of Linux kernels the \fIDEVICE\fR 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. |
| .SH EXIT STATUS |
| The exit status of sg_opcodes is 0 when it is successful. Otherwise see |
| the sg3_utils(8) man page. |
| .SH 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 \fI\-\-old\fR (or \fI\-O\fR) as the |
| first option. See the ENVIRONMENT VARIABLES section for another way to |
| force the use of these older command line options. |
| .TP |
| \fB\-a\fR |
| sort command alphabetically. Equivalent to \fI\-\-alpha\fR in main |
| description. |
| .TP |
| \fB\-c\fR |
| see the \fI\-\-compact\fR option above. |
| .TP |
| \fB\-e\fR |
| see the \fI\-\-enumerate\fR option above. |
| .TP |
| \fB\-H\fR |
| see the \fI\-\-hex\fR option above. |
| .TP |
| \fB\-m\fR |
| see the \fI\-\-mask\fR option above. |
| .TP |
| \fB\-n\fR |
| don't print a summary of the SCSI INQUIRY response on stdout. |
| .TP |
| \fB-N\fR, \fB\-\-new\fR |
| Switch to the newer style options. |
| .TP |
| \fB\-o\fR=\fIOP\fR |
| the \fIDEVICE\fR will be queried for the given operation code (i.e. |
| \fIOP\fR) which is the first byte of a SCSI command. \fIOP\fR 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 \fIDEVICE\fR are listed. |
| .TP |
| \fB\-p\fR=\fIDT\fR |
| see the \fI\-\-pdt=DT\fR option above. |
| .TP |
| \fB\-q\fR |
| set the read extended parameter data (REPD) bit in report TMF cdb. |
| Equivalent to \fI\-\-repd\fR in main description. |
| .TP |
| \fB\-R\fR |
| set the report command timeout descriptor (RCTD) bit in cdb. Equivalent |
| to \fI\-\-rctd\fR in main description. |
| .TP |
| \fB\-s\fR=\fISA\fR |
| the \fIDEVICE\fR will be queried for a command with the given service |
| action (i.e. \fISA\fR). Used in conjunction with the \fI\-o=OP\fR |
| option. If this option is not given, \fI\-o=OP\fR is given and the command |
| in question does have a service action then a value of 0 will be assumed. |
| \fISA\fR is hexadecimal and expected to be in the range 0 to ffff inclusive. |
| .TP |
| \fB\-t\fR |
| list supported task management functions. Equivalent to \fI\-\-tmf\fR in |
| the main description. |
| .TP |
| \fB\-u\fR |
| output all supported commands in the order given by \fIDEVICE\fR. |
| Equivalent to \fI\-\-unsorted\fR in main description. |
| .TP |
| \fB\-v\fR |
| increase level of verbosity. Can be used multiple times. |
| .TP |
| \fB\-V\fR |
| print out version string then exit. |
| .TP |
| \fB\-?\fR |
| output usage message. Ignore all other parameters. |
| .SH 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. |
| .PP |
| 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: |
| .PP |
| # sg_opcodes \-\-op=93h /dev/sdb |
| .PP |
| Opcode=0x93 |
| .br |
| Command_name: Write same(16) |
| .br |
| Command supported [conforming to SCSI standard] |
| .br |
| Usage data: 93 e2 00 00 00 00 ff ff ff ff 00 00 ff ff 00 00 |
| .PP |
| The next example shows the supported task management functions: |
| .PP |
| # sg_opcodes \-\-tmf \-n /dev/sdb |
| .PP |
| Task Management Functions supported by device: |
| .br |
| Abort task |
| .br |
| Abort task set |
| .br |
| Clear ACA |
| .br |
| Clear task set |
| .br |
| Logical unit reset |
| .br |
| Query task |
| .PP |
| 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: |
| .PP |
| # sg_opcodes \-\-enumerate \-\-op=0x9b,0xa |
| .PP |
| SCSI command: |
| .br |
| Read buffer(16), read data from echo buffer |
| .br |
| .SH 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 \fI\-\-old\fR (or \fI\-O\fR) as the first command line option. |
| .SH AUTHOR |
| Written by Douglas Gilbert |
| .SH "REPORTING BUGS" |
| Report bugs to <dgilbert at interlog dot com>. |
| .SH COPYRIGHT |
| Copyright \(co 2004\-2022 Douglas Gilbert |
| .br |
| This software is distributed under the GPL version 2. There is NO |
| warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| .SH "SEE ALSO" |
| .B sg_inq,sg3_utils_json(sg3_utils) |