SG_SES(8)

NAME
sg_ses - send controls and fetch status from a SCSI Enclosure Services (SES) device

SYNOPSIS
sg_ses [--byte1=B1] [--control] [--data=H,H...] [--filter] [--help] [--hex] [--inner-hex] [--list] [--page=PG] [--raw] [--status] [--verbose] [--version] DEVICE

DESCRIPTION

Send controls to a SES device (via a SCSI SEND DIAGNOSTIC command) or fetches status (via a SCSI RECEIVE DIAGNOSTIC RESULTS command). The DEVICE should be a SES device which may be a dedicated enclosure services processor (INQUIRY peripheral device type 0xd) or attached to another type of SCSI device (e.g. a disk) in which case the EncServ bit set in its INQUIRY response.

If no options are given (only the DEVICE argument) then all diagnostic pages supported by the device (including SES pages) are listed.

The most recent reference for this utility is the draft SCSI Enclosure Services 3 document T10/2149-D Revision 2 at http://ww.t10.org . Existing standards for SES and SES-2 are ANSI INCITS 305-1998 and ANSI INCITS 448-2008 respectively.

A tutorial on SES can be found here: http://www.snia.org/events/storage-developer2008/presentations/monday/RajendraDivecha_SCSI_SES.pdf . It contains both an overview and in depth information suitable for decoding the contents of some diagnostic pages used by SES.

OPTIONS
Arguments to long options are mandatory for short options as well. The options are arranged in alphabetical order based on the long option name.

-b, --byte1=B1
    some control pages need byte 1 (i.e. the second byte) of the cdb set. Only required in rare cases when the --control option is also set. Default is 0; B1 is in decimal unless it is prefixed by '0x' or '0X' (or has a trailing 'h' or 'H').

-c, --control
    will send control information to the DEVICE via a SCSI SEND DIAGNOSTIC command. Cannot give both this option and --status. The Enclosure control, String Out, Threshold Out, Array control (obsolete in SES-2) and Subenclosure String Out diagnostic pages can be set currently.

-d, --data=H,H...
    permits a string of comma separated (ASCII) hex bytes to be specified (limit 1024). A (single) space separated string of hex bytes is also allowed but the list needs to be in quotes. This allows the parameters to a control diagnostic page to be specified. The string given should not include the first 4 bytes (i.e. page code and length). See next entry for using stdin.

-d, --data=-
    reads a data string from stdin, limit 1024 bytes. Spaces, tabs and line feeds additionally are permitted as separators.

-f, --filter
    cuts down on the amount of output from the enclosure status diagnostic page. When this option is given, any line which has all its binary flags cleared (i.e. 0) is filtered out (i.e. ignored). If a line has some other value on it (e.g. a temperature) then it is output.

-h, --help
    output the usage message then exit.

-H, --hex
    output the response in hexadecimal.

-i, --inner-hex
    the outer levels of a status diagnostic page are decoded and printed out but the innermost level (e.g. the element status descriptor) is output in hex. Implemented for the more complex diagnostic pages.

-l, --list
    list all known diagnostic page names and SES elements. DEVICE is ignored and utility exits.

-p, --page=PG
    where PG is a page code. Assumed to be in decimal unless prefixed by 0x for hex. Valid range is 0 to 255 (0x0 to 0xff) inclusive. Default is page_code 0 (i.e. "Supported diagnostic pages").

-r, --raw
    outputs the chosen status page in (ASCII) hex in a format suitable for a later invocation using the --data= option. A status diagnostic page less its first 4 bytes (page code and length) is output. When used twice (e.g. -rr) outputs full diagnostic page in binary to stdout.

-s, --status
    will fetch status diagnostic page from the DEVICE via a SCSI RECEIVE DIAGNOSTIC RESULTS command. If this option is not given and --control is not given then --status is assumed.

-v, --verbose
    increase the level of verbosity, (i.e. debug output).

-V, --version
    print the version string and then exit.

NOTES
Currently all status pages, control pages and element types defined in SES-2 revision 17 (14th May 2007) are decoded.

This utility can be used to fetch arbitrary (i.e. non SES) diagnostic pages (using the SCSI READ DIAGNOSTIC command). To this end the --page=PG and --hex options would be appropriate. Arbitrary diagnostic pages can be sent to a device with the sg_senddiag utility.

There is a related command set called SAF-TE (SCSI attached fault-tolerant enclosure) for enclosure (including RAID) status and control. SCSI devices that support SAF-TE report "Processor" peripheral device type (0x3) in their INQUIRY response. See the sg_safte utility in this package or safte-monitor on the internet.

EXAMPLES
These examples use Linux device names. For suitable device names in other supported Operating Systems see the sg3_utils(8) man page.

To view the supported pages:

   sg_ses /dev/sda

To view the configuration page:

   sg_ses --page=1 /dev/sda

To view the status page:

   sg_ses --page=2 /dev/sda

Changing a temperature threshold is possible, if a little awkward. The current thresholds can be shown with:

   sg_ses --page=5 /dev/sda

The threshold to be changed can be chosen. Then output the threshold page in hex (suitable for editing) with:

   sg_ses --page=5 --raw /dev/sda > t

Then with the aid of the SES-2 document (in revision 9: section 6.1.8) use your favourite editor to change t. The change can be sent to the device with:

   sg_ses --control --page=5 --data=- /dev/sda < t

If the above is successful, the threshold should have been changed. To check try:

   sg_ses --page=5 /dev/sda

again.

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

AUTHORS
Written by Douglas Gilbert.

REPORTING BUGS
Report bugs to <dgilbert at interlog dot com>.

COPYRIGHT
Copyright © 2004-2011 Douglas Gilbert
This software is distributed under a FreeBSD license. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

SEE ALSO
sg_inq, sg_safte, sg_senddiag, sg3_utils (in sg3_utils package); safte-monitor (internet)