| .TH SG_SES "8" "October 2021" "sg3_utils\-1.47" SG3_UTILS |
| .SH NAME |
| sg_ses \- access a SCSI Enclosure Services (SES) device |
| .SH SYNOPSIS |
| .B sg_ses |
| [\fI\-\-all\fR] [\fI\-\-ALL\fR] [\fI\-\-descriptor=DES\fR] |
| [\fI\-\-dev\-slot\-num=SN\fR] [\fI\-\-eiioe=A_F\fR] [\fI\-\-filter\fR] |
| [\fI\-\-get=STR\fR] [\fI\-\-hex\fR] [\fI\-\-index=IIA\fR | |
| \fI\-\-index=TIA,II\fR] [\fI\-\-inner\-hex\fR] [\fI\-\-join\fR] |
| [\fI\-\-maxlen=LEN\fR] [\fI\-\-page=PG\fR] [\fI\-\-quiet\fR] [\fI\-\-raw\fR] |
| [\fI\-\-readonly\fR] [\fI\-\-sas\-addr=SA\fR] [\fI\-\-status\fR] |
| [\fI\-\-verbose\fR] [\fI\-\-warn\fR] \fIDEVICE\fR |
| .PP |
| .B sg_ses |
| \fI\-\-control\fR [\fI\-\-byte1=B1\fR] [\fI\-\-clear=STR\fR] |
| [\fI\-\-data=H,H...\fR] [\fI\-\-data=@FN\fR] [\fI\-\-descriptor=DES\fR] |
| [\fI\-\-dev\-slot\-num=SN\fR] [\fI\-\-index=IIA\fR | \fI\-\-index=TIA,II\fR] |
| [\fI\-\-mask\fR] [\fI\-\-maxlen=LEN\fR] [\fI\-\-nickname=SEN\fR] |
| [\fI\-\-nickid=SEID\fR] [\fI\-\-page=PG\fR] [\fI\-\-readonly\fR] |
| [\fI\-\-sas\-addr=SA\fR] [\fI\-\-set=STR\fR] [\fI\-\-verbose\fR] |
| \fIDEVICE\fR |
| .PP |
| .B sg_ses |
| \fI\-\-data=@FN\fR \fI\-\-status\fR [\fI\-\-raw\fR \fI\-\-raw\fR] |
| [<all options from first form>] |
| .br |
| .B sg_ses |
| \fI\-\-inhex=FN\fR \fI\-\-status\fR [\fI\-\-raw\fR \fI\-\-raw\fR] |
| [<all options from first form>] |
| .PP |
| .B sg_ses |
| [\fI\-\-enumerate\fR] [\fI\-\-index=IIA\fR] [\fI\-\-list\fR] [\fI\-\-help\fR] |
| [\fI\-\-version\fR] |
| .SH DESCRIPTION |
| .\" Add any additional description here |
| .PP |
| Fetches management information from a SCSI Enclosure Service (SES) device. |
| This utility can also modify the state of a SES device. The \fIDEVICE\fR |
| should be a SES device which may be a dedicated enclosure services |
| processor in which case an INQUIRY response's Peripheral Device Type is |
| 13 [0xd]. Alternatively it may be attached to another type of SCSI |
| device (e.g. a disk) in which case the EncServ bit is set in its INQUIRY |
| response. |
| .PP |
| If the \fIDEVICE\fR argument is given with no options then the names of all |
| diagnostic pages (dpages) supported are listed. Most, but not necessarily |
| all, of the named dpages are defined in the SES standards and drafts. The |
| most recent reference for this utility is the draft SCSI Enclosure Services |
| 4 document T10/BSR INCITS 555 Revision 5 at https://www.t10.org . Existing |
| standards for SES, SES\-2 and SES\-3 are ANSI INCITS 305\-1998 and ANSI |
| INCITS 448\-2008 and ANSI INCITS 518\-2017 respectively. |
| .PP |
| SAS expanders typically have a SES device attached via a virtual port. |
| Some HBAs (SCSI initiators) choose to expose a SES device internally. That |
| means the SCSI subsystem on the host machine can see the SES device, but |
| devices connected to that HBA (e.g. a SAS expander) cannot see the HBA's |
| SES device. That internal SES device might report on the temperature(s) |
| of the HBA and whether anything is connected to its SCSI ports. |
| .PP |
| The first form shown in the synopsis is for fetching and decoding dpages or |
| fields from the SES \fIDEVICE\fR. A SCSI RECEIVE DIAGNOSTIC RESULTS command |
| is sent to the \fIDEVICE\fR to obtain each dpage response. Rather than |
| decoding a fetched dpage, it may be output in hex or binary with the |
| \fI\-\-hex\fR or \fI\-\-raw \-\-raw\fR options. |
| .PP |
| The second form in the synopsis is for modifying dpages or fields held in |
| the SES \fIDEVICE\fR. A SCSI SEND DIAGNOSTIC command containing a "control" |
| dpage is sent to the \fIDEVICE\fR to cause changes. Changing the state of an |
| enclosure (e.g. requesting the "ident" (locate) LED to flash on a disk |
| carrier in an array) is typically done using a read\-modify\-write cycle. |
| See the section on CHANGING STATE below. |
| .PP |
| The third form in the synopsis has two equivalent invocations shown. They |
| decode the contents of a file (named \fIFN\fR) that holds a hexadecimal or |
| binary representation of one, or many, SES dpage responses. Typically an |
| earlier invocation of the first form of this utility with the '\-HHHH' |
| option would have generated that file. Since no SCSI commands are sent, the |
| \fIDEVICE\fR argument if given will be ignored. |
| .PP |
| The last form in the synopsis shows the options for providing command line |
| help (i.e. usage information), listing out dpage and field information tables |
| held by the utility (\fI\-\-enumerate\fR), or printing the version string |
| of this utility. |
| .PP |
| There is a web page discussing this utility at |
| https://sg.danny.cz/sg/sg_ses.html . Support for downloading microcode to |
| a SES device has been placed in a separate utility called sg_ses_microcode. |
| .PP |
| In the following sections "dpage" refers to a diagnostic page, either fetched |
| with a SCSI RECEIVE DIAGNOSTIC RESULTS command, sent to the \fIDEVICE\fR with |
| a SCSI SEND DIAGNOSTIC command, or fetched from data supplied by the |
| \fI\-\-data=\fR option. |
| .SH 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. |
| .TP |
| \fB\-a\fR, \fB\-\-all\fR |
| shows (almost) all status dpages, following references and presenting |
| the information as a long list whose indentation indicates the level |
| of nesting. This option is actually the same as \fI\-\-join\fR, see its |
| description for more information. |
| .br |
| If used twice, adds threshold elements to output (if they are available). |
| So it is the same as using \fI\-\-join\fRtwice. |
| .TP |
| \fB\-z\fR, \fB\-\-ALL\fR |
| shows (almost) all status dpages, following references and presenting |
| the information as a long list whose indentation indicates the level |
| of nesting. Also shows the threshold elements if they are available. |
| This option is the same as using \fI\-\-join\fR rwice. |
| .TP |
| \fB\-b\fR, \fB\-\-byte1\fR=\fIB1\fR |
| some modifiable dpages may need byte 1 (i.e. the second byte) set. In the |
| Enclosure Control dpage, byte 1 contains the INFO, NON\-CRIT, CRIT and |
| UNRECOV bits. In the Subenclosure String Out, Subenclosure Nickname Control |
| and Download Microcode Control dpages, byte 1 is the Subenclosure identifier. |
| Active when the \fI\-\-control\fR and \fI\-\-data=H,H...\fR options are used |
| and the default value is 0. If the \fI\-\-clear=STR\fR or \fI\-\-set=STR\fR |
| option is used then the value read from byte 1 is written back to byte 1. |
| \fIB1\fR is in decimal unless it is prefixed by '0x' or '0X' (or has a |
| trailing 'h' or 'H'). |
| .TP |
| \fB\-C\fR, \fB\-\-clear\fR=\fISTR\fR |
| Used to clear an element field in the Enclosure Control or Threshold Out |
| dpage. Must be used together with an indexing option to specify which element |
| is to be changed. The Enclosure Control dpage is assumed if the |
| \fI\-\-page=PG\fR option is not given. See the STR FORMAT and the CLEAR, GET, |
| SET sections below. |
| .TP |
| \fB\-c\fR, \fB\-\-control\fR |
| will send control information to the \fIDEVICE\fR via a SCSI SEND |
| DIAGNOSTIC command. Cannot give both this option and \fI\-\-status\fR. |
| The Enclosure Control, String Out, Threshold Out, Array Control (obsolete |
| in SES\-2), Subenclosure String Out, Subenclosure Nickname Control and |
| Download Microcode dpages can be set currently. This option is assumed if |
| either the \fI\-\-clear=STR\fR or \fI\-\-set=STR\fR option is given. |
| .TP |
| \fB\-d\fR, \fB\-\-data\fR=\fIH,H...\fR |
| 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 option allows the parameters to a |
| control dpage to be specified. The string given should not include the first 4 |
| bytes (i.e. page code and length). See the DATA SUPPLIED section below. |
| .TP |
| \fB\-d\fR, \fB\-\-data\fR=\- |
| reads one or more data strings from stdin, limit almost 2**16 bytes. stdin |
| may provide ASCII hex as a comma separated list (i.e. as with the |
| \fI\-\-data=H,H...\fR option). Additionally spaces, tabs and line feeds are |
| permitted as separators from stdin . Stops reading stdin when an EOF is |
| detected. See the DATA SUPPLIED section below. |
| .TP |
| \fB\-d\fR, \fB\-\-data\fR=@\fIFN\fR |
| reads one or more data strings from the file called \fIFN\fR, limit almost |
| 2**16 bytes. The contents of the file is decoded in the same fashion as |
| stdin described in the previous option. See the DATA SUPPLIED section below. |
| .TP |
| \fB\-D\fR, \fB\-\-descriptor\fR=\fIDES\fR |
| where \fIDES\fR is a descriptor name (string) as found in the Element |
| Descriptor dpage. This is a medium level indexing alternative to the low |
| level \fI\-\-index=\fR options. If the descriptor name contains a space then |
| \fIDES\fR needs to be surrounded by quotes (single or double) or the space |
| escaped (e.g. preceded by a backslash). See the DESCRIPTOR NAME, DEVICE SLOT |
| NUMBER AND SAS ADDRESS section below. |
| .TP |
| \fB\-x\fR, \fB\-\-dev\-slot\-num\fR=\fISN\fR, \fB\-\-dsn\fR=\fISN\fR |
| where \fISN\fR is a device slot number found in the Additional Element Status |
| dpage. Only entries for FCP and SAS devices (with EIP=1) have device slot |
| numbers. \fISN\fR must be a number in the range 0 to 255 (inclusive). 255 is |
| used to indicate there is no corresponding device slot. This is a medium level |
| indexing alternative to the low level \fI\-\-index=\fR options. See the |
| DESCRIPTOR NAME, DEVICE SLOT NUMBER AND SAS ADDRESS section below. |
| .TP |
| \fB\-E\fR, \fB\-\-eiioe\fR=\fIA_F\fR |
| \fIA_F\fR is either the string 'auto' or 'force'. There was some fuzziness |
| in the interpretation of the 'element index' field in the Additional Element |
| Status (AES) dpage between SES\-2 and SES\-3. The EIIOE bit was introduced to |
| resolve the problem but not all enclosures have caught up. In the SES\-3 |
| revision 12 draft the EIIOE bit was expanded to a 2 bit EIIOE field. |
| Using '\-\-eiioe=force' will decode the AES dpage as if the EIIOE field is set |
| to 1. Using '\-\-eiioe=auto' will decode the AES dpage as if the EIIOE field |
| is set to 1 if the first AES descriptor has its EIP bit set and its element |
| index field is 1 (in other words a heuristic to guess whether the EIIOE field |
| should be set to 1 or 0). |
| .br |
| If the enclosure sets the actual EIIOE field to 1 or more then this option has |
| no effect. It is recommended that HP JBOD users set \-\-eiioe=auto . |
| .TP |
| \fB\-e\fR, \fB\-\-enumerate\fR |
| enumerate all known diagnostic page (dpage) names and SES elements that this |
| utility recognizes plus the abbreviations accepted by this utility. Ignores |
| \fIDEVICE\fR if it is given. Essentially it is dumping out tables held |
| internally by this utility. |
| .br |
| If \fI\-\-enumerate\fR is given twice, then the recognised acronyms for the |
| \fI\-\-clear=STR\fR, \fI\-\-get=STR\fR and \fI\-\-set=STR\fR options are |
| listed. The utility exits after listing this information, so most other |
| options and \fIDEVICE\fR are ignored. Since there are many acronyms for |
| the Enclosure Control/Status dpage then the output can be further restricted |
| by giving the \fI\-\-index=IIA\fR option (e.g. "sg_ses \-ee \-I ts" to only |
| show the acronyms associated with the Enclosure Control/Status dpage's |
| Temperature Sensor Element Type). |
| .TP |
| \fB\-f\fR, \fB\-\-filter\fR |
| cuts down on the amount of output from the Enclosure Status dpage and the |
| Additional Element Status dpage. 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. |
| When this option is used twice only elements associated with the "status=ok" |
| field (in the Enclosure status dpage) are output. The \fI\-\-filter\fR option |
| is useful for reducing the amount of output generated by the \fI\-\-join\fR |
| option. |
| .TP |
| \fB\-G\fR, \fB\-\-get\fR=\fISTR\fR |
| Used to read a field in a status element. Must be used together with a an |
| indexing option to specify which element is to be read. By default the |
| Enclosure Status dpage is read, the only other dpages that can be read are the |
| Threshold In and Additional Element Status dpages. If a value is found it is |
| output in decimal to stdout (by default) or in hexadecimal preceded by "0x" |
| if the \fI\-\-hex\fR option is also given. See the STR FORMAT and the CLEAR, |
| GET, SET sections below. |
| .TP |
| \fB\-h\fR, \fB\-\-help\fR |
| output the usage message then exit. Since there is a lot of information, |
| it is split into two pages. The most important is shown on the first page. |
| Use this option twice (e.g. '\-hh') to output the second page. Note: the |
| \fI\-\-enumerate\fR option might also be viewed as a help or usage type |
| option. And like this option it has a "given twice" form: '\-ee'. |
| .TP |
| \fB\-H\fR, \fB\-\-hex\fR |
| If the \fI\-\-get=STR\fR option is given then output the value found (if |
| any) in hexadecimal, with a leading "0x". Otherwise output the response |
| in hexadecimal; with trailing ASCII if given once, without it if given |
| twice, and simple hex if given three or more times. Ignored when all |
| elements from several dpages are being accessed (e.g. when the \fI\-\-join\fR |
| option is used). Also see the \fI\-\-raw\fR option which may be used |
| with this option. |
| .br |
| To dump one of more dpage responses to stdout in ASCII parsable hexadecimal |
| use \fI\-HHH\fR or \fI\-HHHH\fR. The triple H form only outputs hexadecimals |
| which is fine for a single dpage response. When all dpages are dumped (e.g. |
| with \fI\-\-page=all\fR) then the quad H form adds the name of each dpage |
| following a hash mark ('#'). The \fI\-\-data=\fR option parser ignores |
| everything from and including a hash mark to the end of the line. Hence the |
| output of the quad H form is still parsable plus it is easier for users to |
| view and possibly edit. \fI\-HHHHH\fR (that is 5) adds the page code in |
| hex after the page's name in the comment. |
| .TP |
| \fB\-I\fR, \fB\-\-index\fR=\fIIIA\fR |
| where \fIIIA\fR is either an individual index (II) or an Element type |
| abbreviation (A). See the INDEXES section below. If the \fI\-\-page=PG\fR |
| option is not given then the Enclosure Status (or Control) dpage is assumed. |
| May be used with the \fI\-\-join\fR option or one of the \fI\-\-clear=STR\fR, |
| \fI\-\-get=STR\fR or \fI\-\-set=STR\fR options. To enumerate the available |
| Element type abbreviations use the \fI\-\-enumerate\fR option. |
| .TP |
| \fB\-I\fR, \fB\-\-index\fR=\fITIA,II\fR |
| where \fITIA,II\fR is an type header index (TI) or Element type |
| abbreviation (A) followed by an individual index (II). See the INDEXES section |
| below. If the \fI\-\-page=PG\fR option is not given then the Enclosure |
| Status (or Control) dpage is assumed. May be used with the \fI\-\-join\fR |
| option or one of the \fI\-\-clear=STR\fR, \fI\-\-get=STR\fR or |
| \fI\-\-set=STR\fR options. To enumerate the available Element type |
| abbreviations use the \fI\-\-enumerate\fR option. |
| .TP |
| \fB\-X\fR, \fB\-\-inhex\fR=\fIFN\fR |
| where \fIFN\fR is a filename. It has the equivalent action of the |
| \fI\-\-data=@FN\fR option. If \fIFN\fR is '\-' then stdin is read. This |
| option has been given for compatibility with other utilities in this |
| package that use \fI\-\-inhex=FN\fR (or \fI\-\-in=FN\fR) is a similar |
| way. See the "FORMAT OF FILES CONTAINING ASCII HEX" section in the |
| sg3_utils manpage for more information. |
| .TP |
| \fB\-i\fR, \fB\-\-inner\-hex\fR |
| the outer levels of a status dpage are decoded and printed out but the |
| innermost level (e.g. the Element Status Descriptor) is output in hex. Also |
| active with the Additional Element Status and Threshold In dpages. Can be |
| used with an indexing option and/or \fI\-\-join\fR options. |
| .TP |
| \fB\-j\fR, \fB\-\-join\fR |
| group elements from the Element Descriptor, Enclosure Status and Additional |
| Element Status dpages. If this option is given twice then elements from the |
| Threshold In dpage are also grouped. The order is dictated by the Configuration |
| dpage. |
| .br |
| There can be a bewildering amount of information in the "join" output. The |
| default is to output everything. Several additional options are provided to |
| cut down the amount displayed. If the indexing options is given, only the |
| matching elements and their associated fields are output. The \fI\-\-filter\fR |
| option (see its description) can be added to reduce the amount of output. |
| Also "\-\-page=aes" (or "\-p 0xa") can be added to suppress the output of |
| rows that don't have a "aes" dpage component. See the INDEXES and DESCRIPTOR |
| NAME, DEVICE SLOT NUMBER AND SAS ADDRESS sections below. |
| .TP |
| \fB\-l\fR, \fB\-\-list\fR |
| This option is equivalent to \fI\-\-enumerate\fR. See that option. |
| .TP |
| \fB\-M\fR, \fB\-\-mask\fR |
| When modifying elements, the default action is a read (status element), |
| mask, modify (based on \fI\-\-clear=STR\fR or \fI\-\-set=STR\fR) then write |
| back as the control element. The mask step is new in sg_ses version 1.98 |
| and is based on what is allowable (and in the same location) in draft SES\-3 |
| revision 6. Those masks may evolve, as they have in the past. This option |
| re\-instates the previous logic which was to ignore the mask step. The |
| default action (i.e. without this option) is to perform the mask step in |
| the read\-mask\-modify\-write sequence. |
| .TP |
| \fB\-m\fR, \fB\-\-maxlen\fR=\fILEN\fR |
| \fILEN\fR is placed in the ALLOCATION LENGTH field of the SCSI RECEIVE |
| DIAGNOSTIC RESULTS commands sent by the utility. It represents the maximum |
| size of data the SES device can return (in bytes). It cannot exceed 65535 |
| and defaults to 65532 (bytes). Some systems may not permit such large sizes |
| hence the need for this option. If \fILEN\fR is less than 0 or greater than |
| 65535 then an error is generated. If \fILEN\fR is 0 then the default value |
| is used, otherwise if it is less than 4 then it is ignored (and a warning is |
| sent to stderr). |
| .TP |
| \fB\-n\fR, \fB\-\-nickname\fR=\fISEN\fR |
| where \fISEN\fR is the new Subenclosure Nickname. Only the first 32 |
| characters (bytes) of \fISEN\fR are used, if more are given they are |
| ignored. See the SETTING SUBENCLOSURE NICKNAME section below. |
| .TP |
| \fB\-N\fR, \fB\-\-nickid\fR=\fISEID\fR |
| where \fISEID\fR is the Subenclosure identifier that the new |
| Nickname (\fISEN\fR) will be applied to. So \fISEID\fR must be an existing |
| Subenclosure identifier. The default value is 0 which is the |
| main enclosure. |
| .TP |
| \fB\-p\fR, \fB\-\-page\fR=\fIPG\fR |
| where \fIPG\fR is a dpage abbreviation or code (a number). If \fIPG\fR |
| starts with a digit it is assumed to be in decimal unless prefixed by |
| 0x for hex. Valid range is 0 to 255 (0x0 to 0xff) inclusive. Default is |
| dpage 'sdp' which is page_code 0 (i.e. "Supported Diagnostic Pages") if |
| no other options are given. |
| .br |
| Page code 0xff or abbreviation "all" is not a real dpage (as the highest |
| real dpage is 0x3f) but instead causes all dpages whose page code is 0x2f |
| or less to be output. This can be used with either the \fI\-HHHH\fR or |
| \fI\-rr\fR to send either hexadecimal ASCII or binary respectively to |
| stdout. |
| .br |
| To list the available dpage abbreviations give "xxx" for \fIPG\fR; the same |
| information can also be found with the \fI\-\-enumerate\fR option. |
| .TP |
| \fB\-q\fR, \fB\-\-quiet\fR |
| this suppresses the number of warnings and messages output. The exit status |
| of the utility is unaffected by this option. |
| .TP |
| \fB\-r\fR, \fB\-\-raw\fR |
| outputs the chosen status dpage in ASCII hex in a format suitable for a |
| later invocation using the \fI\-\-data=\fR option. A dpage less its first |
| 4 bytes (page code and length) is output. When used twice (e.g. \fI\-rr\fR) |
| the full dpage contents is output in binary to stdout. |
| .br |
| when \fI\-rr\fR is used together with the \fI\-\-data=\-\fR or |
| \fI\-\-data=@FN\fR then stdin or file FN is decoded as a binary stream that |
| continues to be read until an end of file (EOF). Once that data is read then |
| the internal raw option is cleared to 0 so the output is not effected. So |
| the \fI\-rr\fR option either changes how the input or output is treated, |
| but not both. |
| .TP |
| \fB\-R\fR, \fB\-\-readonly\fR |
| open the \fIDEVICE\fR read\-only (e.g. in Unix with the O_RDONLY flag). |
| The default is to open it read\-write. |
| .TP |
| \fB\-A\fR, \fB\-\-sas\-addr\fR=\fISA\fR |
| this is an indexing method for SAS end devices (e.g. SAS disks). The utility |
| will try to find the element or slot in the Additional Element Status dpage |
| whose SAS address matches \fISA\fR. For a SAS disk or tape that SAS address |
| is its target port identifier for the port connected to that element or slot. |
| Most SAS disks and tapes have two such target ports, usually numbered |
| consecutively. |
| .br |
| SATA devices in a SAS enclosure often receive "manufactured" target port |
| identifiers from a SAS expander; typically will have a SAS address close to, |
| but different from, the SAS address of the expander itself. Note that this |
| manufactured target port identifier is different from a SATA disk's WWN. |
| .br |
| \fISA\fR is a hex number that is up to 8 digits long. It may have a |
| leading '0x' or '0X' or a trailing 'h' or 'H'. This option is a medium level |
| indexing alternative to the low level \fI\-\-index=\fR options. |
| See the DESCRIPTOR NAME, DEVICE SLOT NUMBER AND SAS ADDRESS section below. |
| .TP |
| \fB\-S\fR, \fB\-\-set\fR=\fISTR\fR |
| Used to set an element field in the Enclosure Control or Threshold Out dpage. |
| Must be used together with an indexing option to specify which element is to |
| be changed. The Enclosure Control dpage is assumed if the \fI\-\-page=PG\fR |
| option is not given. See the STR FORMAT and CLEAR, GET, SET sections below. |
| .TP |
| \fB\-s\fR, \fB\-\-status\fR |
| will fetch dpage from the \fIDEVICE\fR via a SCSI RECEIVE DIAGNOSTIC RESULTS |
| command (or from \fI\-\-data=@FN\fR). In the absence of other options that |
| imply modifying a dpage (e.g. \fI\-\-control\fR or \fI\-\-set=STR\fR) then |
| \fI\-\-status\fR is assumed, except when the \fI\-\-data=\fR option is given. |
| When the \fI\-\-data=\fR option is given there is no default action: either |
| the \fI\-\-control\fR or this option must be given to distinguish between |
| the two different ways that data will be treated. |
| .TP |
| \fB\-v\fR, \fB\-\-verbose\fR |
| increase the level of verbosity. For example when this option is given four |
| times (in which case the short form is more convenient: '\-vvvv') then if |
| the internal join array has been generated then it is output to stderr in |
| a form suitable for debugging. |
| .TP |
| \fB\-V\fR, \fB\-\-version\fR |
| print the version string and then exit. |
| .TP |
| \fB\-w\fR, \fB\-\-warn\fR |
| warn about certain irregularities with warnings sent to stderr. The join |
| is a complex operation that relies on information from several dpages to be |
| synchronized. The quality of SES devices vary and to be fair, the |
| descriptions from T10 drafts and standards have been tweaked several |
| times (see the EIIOE field) in order to clear up confusion. |
| .SH INDEXES |
| An enclosure can have information about its disk and tape drives plus other |
| supporting components like power supplies spread across several dpages. |
| Addressing a specific element (overall or individual) within a dpage is |
| complicated. This section describes low level indexing (i.e. choosing a |
| single element (or a group of related elements) from a large number of |
| elements). If available, the medium level indexing described in the |
| following section (DESCRIPTOR NAME, DEVICE SLOT NUMBER AND SAS ADDRESS) |
| might be simpler to use. |
| .PP |
| The Configuration dpage is key to low level indexing: it contains a list |
| of "type headers", each of which contains an Element type (e.g. Array |
| Device Slot), a Subenclosure identifier (0 for the primary enclosure) and |
| a "Number of possible elements". Corresponding to each type header, the |
| Enclosure Status dpage has one "overall" element plus "Number of possible |
| elements" individual elements all of which have the given Element type. For |
| some Element types the "Number of possible elements" will be 0 so the |
| Enclosure Status dpage has only one "overall" element corresponding to that |
| type header. The Element Descriptor dpage and the Threshold (In and Out) |
| dpages follow the same pattern as the Enclosure Status dpage. |
| .PP |
| The numeric index corresponding to the overall element is "\-1". If the |
| Configuration dpage indicates a particular element type has "n" elements |
| and n is greater than 0 then its indexes range from 0 to n\-1 . |
| .PP |
| The Additional Element Status dpage is a bit more complicated. It has |
| entries for "Number of possible elements" of certain Element types. It |
| does not have entries corresponding to the "overall" elements. To make |
| the correspondence a little clearer each descriptor in this dpage optionally |
| contains an "Element Index Present" (EIP) indicator. If EIP is set then each |
| element's "Element Index" field refers to the position of the corresponding |
| element in the Enclosure Status dpage. |
| .PP |
| Addressing a single overall element or a single individual element is done |
| with two indexes: TI and II. Both are origin 0. TI=0 corresponds to the |
| first type header entry which must be a Device Slot or Array Device Slot |
| Element type (according to the SES\-2 standard). To address the corresponding |
| overall instance, II is set to \-1, otherwise II can be set to the individual |
| instance index. As an alternative to the type header index (TI), an Element |
| type abbreviation (A) optionally followed by a number (e.g. "ps" refers to |
| the first Power Supply Element type; "ps1" refers to the second) can be |
| given. |
| .PP |
| One of two command lines variants can be used to specify indexes: |
| \fI\-\-index=TIA,II\fR where \fITIA\fR is either an type header index (TI) |
| or an Element type abbreviation (A) (e.g. "ps" or "ps1"). \fIII\fR is either |
| an individual index or "\-1" to specify the overall element. The second |
| variant is \fI\-\-index=IIA\fR where \fIIIA\fR is either an individual |
| index (II) or an Element type abbreviation (A). When \fIIIA\fR is an |
| individual index then the option is equivalent to \fI\-\-index=0,II\fR. When |
| \fIIIA\fR is an Element type abbreviation then the option is equivalent to |
| \fI\-\-index=A,\-1\fR. |
| .PP |
| Wherever an individual index is applicable, it can be replaced by an |
| individual index range. It has the form: <first_ii>\-<last_ii>. For |
| example: '3\-5' will select individual indexes 3, 4 and 5 . |
| .PP |
| To cope with vendor specific Element types (whose type codes should be in |
| the range 128 to 255) the Element type code can be given as a number with |
| a leading underscore. For example these are equivalent: \fI\-\-index=arr\fR |
| and \fI\-\-index=_23\fR since the Array Device Slot Element type code is 23. |
| Also \fI\-\-index=ps1\fR and \fI\-\-index=_2_1\fR are equivalent. |
| .PP |
| Another example: if the first type header in the Configuration dpage has |
| has Array Device Slot Element type then \fI\-\-index=0,\-1\fR is |
| equivalent to \fI\-\-index=arr\fR. Also \fI\-\-index=arr,3\fR is equivalent |
| to \fI\-\-index=3\fR. |
| .PP |
| The \fI\-\-index=\fR options can be used to reduce the amount of |
| output (e.g. only showing the element associated with the second 12 volt |
| power supply). They may also be used together with with the |
| \fI\-\-clear=STR\fR, \fI\-\-get=STR\fR and \fI\-\-set=STR\fR options which |
| are described in the STR section below. |
| .SH DESCRIPTOR NAME, DEVICE SLOT NUMBER AND SAS ADDRESS |
| The three options: \fI\-\-descriptor=DES\fR, \fI\-\-dev\-slot\-num=SN\fR |
| and \fI\-\-sas\-addr=SA\fR allow medium level indexing, as an alternative |
| to the low level \fI\-\-index=\fR options. Only one of the three options |
| can be used in an invocation. Each of the three options implicitly set the |
| \fI\-\-join\fR option since they need either the Element Descriptor dpage |
| or the Additional Element Status dpage as well as the dpages needed by the |
| \fI\-\-index=\fR option. |
| .PP |
| These medium level indexing options need support from the SES device and |
| that support is optional. For example the \fI\-\-descriptor=DES\fR needs |
| the Element Descriptor dpage provided by the SES device however that is |
| optional. Also the provided descriptor names need to be useful, and having |
| descriptor names which are all "0" is not very useful. Also some |
| elements (e.g. overall elements) may not have descriptor names. |
| .PP |
| These medium level indexing options can be used to reduce the amount of |
| output (e.g. only showing the elements related to device slot number 3). |
| They may also be used together with with the \fI\-\-clear=STR\fR, |
| \fI\-\-get=STR\fR and \fI\-\-set=STR\fR options which are described in the |
| following section. Note that even if a field can be set (e.g. "do not |
| remove" (dnr)) and that field can be read back with \fI\-\-get=STR\fR |
| confirming that change, the disk array may still ignore it (e.g. because it |
| does not have the mechanism to lock the disk drawer). |
| .SH STR FORMAT |
| The \fISTR\fR operands of the \fI\-\-clear=STR\fR, \fI\-\-get=STR\fR and |
| \fI\-\-set=STR\fR options all have the same structure. There are two forms: |
| .br |
| <acronym>[=<value>] |
| .br |
| <start_byte>:<start_bit>[:<num_bits>][=<value>] |
| .PP |
| The <acronym> is one of a list of common fields (e.g. "ident" and "fault") |
| that the utility converts internally into the second form. The <start_byte> |
| is usually in the range 0 to 3, the <start_bit> must be in the range 0 to |
| 7 and the <num_bits> must be in the range 1 to 64 (default 1). The |
| number of bits are read in the left to right sense of the element tables |
| shown in the various SES draft documents. For example the 8 bits of |
| byte 2 would be represented as 2:7:8 with the most significant bit being |
| 2:7 and the least significant bit being 2:0 . |
| .PP |
| The <value> is optional but is ignored if provided to \fI\-\-get=STR\fR. |
| For \fI\-\-set=STR\fR the default <value> is 1 while for \fI\-\-clear=STR\fR |
| the default value is 0 . <value> is assumed to be decimal, hexadecimal |
| values can be given in the normal fashion. |
| .PP |
| The supported list of <acronym>s can be viewed by using the |
| \fI\-\-enumerate\fR option twice (or "\-ee"). |
| .SH CLEAR, GET, SET |
| The \fI\-\-clear=STR\fR, \fI\-\-get=STR\fR and \fI\-\-set=STR\fR options can |
| be used up to 8 times in the same invocation. Any <acronym>s used in the |
| \fISTR\fR operands must refer to the same dpage. |
| .PP |
| When multiple of these options are used (maximum: 8), they are applied in the |
| order in which they appear on the command line. So if options contradict each |
| other, the last one appearing on the command line will be enforced. When |
| there are multiple \fI\-\-clear=STR\fR and \fI\-\-set=STR\fR options, then |
| the dpage they refer to is only written after the last one. |
| .SH DATA SUPPLIED |
| This section describes the two scenarios that can occur when the |
| \fI\-\-data=\fR option is given. These scenarios are the same irrespective |
| of whether the argument to the \fI\-\-data=\fR option is a string of |
| hex bytes on the command line, stdin (indicated by \fI\-\-data=\-\fR) or |
| names a file (e.g. \fI\-\-data=@thresh_in_dpage.hex\fR). |
| .PP |
| The first scenario is flagged by the \fI\-\-control\fR option. It uses the |
| supplied data to build a 'control' dpage that will be sent to the |
| \fIDEVICE\fR using the SCSI SCSI SEND DIAGNOSTIC command. The supplied dpage |
| data should not include its first 4 bytes. Those 4 bytes are added by this |
| utility using the \fI\-\-page=PG\fR option with \fIPG\fR placed at byte |
| offset 0). If needed, the \fI\-\-byte1=B1\fR option sets byte offset 1, |
| else 0 is placed in that position. The number of bytes decoded from the data |
| provided (i.e. its length) goes into byte offsets 2 and 3. |
| .PP |
| The second scenario is flagged by the \fI\-\-status\fR option. It decodes |
| the supplied data assuming that it represents the response to one or more |
| SCSI RECEIVE DIAGNOSTIC RESULTS commands. Those responses have typically |
| been captured from some earlier invocation(s) of this utility. Those earlier |
| invocations could use the '\-HHH' or '\-HHHH' option and file redirection to |
| capture that response (or responses) in hexadecimal. The supplied dpage |
| response data is decoded according to the other command line options. For |
| example the \fI\-\-join\fR option could be given and that would require the |
| data from multiple dpages typically: Configuration, Enclosure status, |
| Element descriptor and Additional element status dpages. If in doubt use |
| \fI\-\-page=all\fR in the capture phase; having more dpages than needed |
| is not a problem. |
| .PP |
| By default the user supplied data is assumed to be ASCII hexadecimal in |
| lines that don't exceed 512 characters. Anything on a line from and |
| including a hash mark ('#') to the end of line is ignored. An end of |
| line can be a LF or CR,LF and blank lines are ignored. Each separated |
| pair (or single) hexadecimal digits represent a byte (and neither a |
| leading '0x' nor a trailing 'h' should be given). Separators are either |
| space, tab, comma or end of line. |
| .PP |
| Alternatively binary can be used and this is flagged by the '\-rr' option. |
| The \fI\-\-data=H,H...\fR form cannot use binary values for the 'H's, only |
| ASCII hexadecimal. The other two forms (\fI\-\-data=\-\fR and |
| \fI\-\-data=@FN\fR) may contain binary data. Note that when the '\-rr' |
| option is used with \fI\-\-data=@FN\fR that it only changes the |
| interpretation of the input data, it does not change the decoding and output |
| representation. |
| .SH CHANGING STATE |
| This utility has various techniques for changing the state of a SES device. |
| As noted above this is typically a read\-modify\-write type operation. |
| Most modifiable dpages have a "status" (or "in") page that can be read, and |
| a corresponding "control" (or "out") dpage that can be written back to change |
| the state of the enclosure. |
| .PP |
| The lower level technique provided by this utility involves outputting |
| a "status" dpage in hex with \fI\-\-raw\fR. Then a text editor can be used |
| to edit the hex (note: to change an Enclosure Control descriptor the SELECT |
| bit needs to be set). Next the control dpage data can fed back with the |
| \fI\-\-data=H,H...\fR option together with the \fI\-\-control\fR option; |
| the \fI\-\-byte1=B1\fR option may need to be given as well. |
| .PP |
| Changes to the Enclosure Control dpage (and the Threshold Out dpage) can be |
| done at a higher level. This involves choosing a dpage (the default in this |
| case is the Enclosure Control dpage). Next choose an individual or overall |
| element index (or name it with its Element Descriptor string). Then give |
| the element's name (e.g. "ident" for RQST IDENT) or its position within that |
| element (e.g. in an Array Device Slot Control element RQST IDENT is byte 2, |
| bit 1 and 1 bit long ("2:1:1")). Finally a value can be given, if not the |
| value for \fI\-\-set=STR\fR defaults to 1 and for \fI\-\-clear=STR\fR |
| defaults to 0. |
| .SH SETTING SUBENCLOSURE NICKNAME |
| The format of the Subenclosure Nickname control dpage is different from its |
| corresponding status dpage. The status dpage reports all Subenclosure |
| Nicknames (and Subenclosure identifier 0 is the main enclosure) while the |
| control dpage allows only one of them to be changed. Therefore using the |
| \fB\-\-data\fR option technique to change a Subenclosure nickname is |
| difficult (but still possible). |
| .PP |
| To simplify changing a Subenclosure nickname the \fI\-\-nickname=SEN\fR and |
| \fI\-\-nickid=SEID\fR options have been added. If the \fISEN\fR string |
| contains spaces or other punctuation, it should be quoted: surrounded by |
| single or double quotes (or the offending characters escaped). If the |
| \fI\-\-nickid=SEID\fR is not given then a Subenclosure identifier of 0 is |
| assumed. As a guard the \fI\-\-control\fR option must also be given. If |
| the \fI\-\-page=PG\fR option is not given then \fI\-\-page=snic\fR is |
| assumed. |
| .PP |
| When \fI\-\-nickname=SEN\fR is given then the Subenclosure Nickname Status |
| dpage is read to obtain the Generation Code field. That Generation Code |
| together with no more than 32 bytes from the Nickname (\fISEN\fR) and the |
| Subenclosure Identifier (\fISEID\fR) are written to the Subenclosure Nickname |
| Control dpage. |
| .PP |
| There is an example of changing a nickname in the EXAMPLES section below. |
| .SH NVME ENCLOSURES |
| Support has been added to sg_ses (actually, its underlying library) for |
| NVMe (also known as NVM Express) Enclosures. It can be considered |
| experimental in sg3_utils package version 1.43 and sg_ses version 2.34 . |
| .PP |
| This support is based on a decision by NVME\-MI (Management Interface) |
| developers to support the SES\-3 standard. This was facilitated by adding |
| NVME\-MI SES Send and SES Receive commands that tunnel dpage contents as |
| used by SES. |
| .SH NOTES |
| This utility can be used to fetch arbitrary (i.e. non SES) dpages (using |
| the SCSI READ DIAGNOSTIC command). To this end the \fI\-\-page=PG\fR and |
| \fI\-\-hex\fR options would be appropriate. Non\-SES dpages can be sent to |
| a device with the sg_senddiag utility. |
| .PP |
| The most troublesome part of the join operation is associating Additional |
| Element Status descriptors correctly. At least one SES device vendor has |
| misinterpreted the SES\-2 standard, specifically with its "element index" |
| field interpretation. The code in this utility interprets the "element |
| index" field as per the SES\-2 standard and if that yields an inappropriate |
| Element type, adjusts its indexing to follow that vendor's |
| misinterpretation. The SES\-3 drafts have introduced the EIIOE (Element |
| Index Includes Overall Elements) bit which later became a 2 bit field to |
| resolve this ambiguity. See the \fI\-\-eiioe=A_F\fR option. |
| .PP |
| In draft SES\-3 revision 5 the "Door Lock" element name was changed to |
| the "Door" (and an OPEN field was added to the status element). As a |
| consequence the former 'dl' element type abbreviation has been changed |
| to 'do'. |
| .PP |
| Some RAID controllers hide SES device nodes from the host Operating System. |
| It has been reported that some MegaRAID controllers do this and the |
| following command is needed to expose them: |
| .PP |
| perccli /cx set backplane expose=<on/off> |
| .PP |
| where perccli is Dell's version of BroadCom's (LSI) storcli utility. |
| .PP |
| 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 the |
| safte\-monitor utility on the Internet. |
| .PP |
| The internal join array is statically allocated and its size is controlled |
| by the MX_JOIN_ROWS define. Its current value is 520. |
| .SH EXAMPLES |
| Examples can also be found at https://sg.danny.cz/sg/sg_ses.html |
| .PP |
| The following examples use Linux device names. For suitable device names |
| in other supported Operating Systems see the sg3_utils(8) man page. |
| .PP |
| To view the supported dpages: |
| .PP |
| sg_ses /dev/bsg/6:0:2:0 |
| .PP |
| To view the Configuration Diagnostic dpage: |
| .PP |
| sg_ses \-\-page=cf /dev/bsg/6:0:2:0 |
| .PP |
| To view the Enclosure Status dpage: |
| .PP |
| sg_ses \-\-page=es /dev/bsg/6:0:2:0 |
| .PP |
| To get the (attached) SAS address of that device (which is held in the |
| Additional Element Sense dpage (dpage 10)) printed on hex: |
| .PP |
| sg_ses \-p aes \-D ArrayDevice07 \-G at_sas_addr \-H /dev/sg3 |
| .PP |
| To collate the information in the Enclosure Status, Element Descriptor |
| and Additional Element Status dpages the \fI\-\-join\fR option can be used: |
| .PP |
| sg_ses \-\-join /dev/sg3 |
| .PP |
| This will produce a lot of output. To filter out lines that don't contain |
| much information add the \fI\-\-filter\fR option: |
| .PP |
| sg_ses \-\-join \-\-filter /dev/sg3 |
| .PP |
| Fields in the various elements of the Enclosure Control and Threshold dpages |
| can be changed with the \fI\-\-clear=STR\fR and \fI\-\-set=STR\fR |
| options. [All modifiable dpages can be changed with the \fI\-\-raw\fR and |
| \fI\-\-data=H,H...\fR options.] The following example looks at making |
| the "ident" LED (also called "locate") flash on "ArrayDevice07" which is a |
| disk (or more precisely the carrier drawer the disk is in): |
| .PP |
| sg_ses \-\-index=7 \-\-set=2:1:1 /dev/sg3 |
| .PP |
| If the Element Descriptor diagnostic dpage shows that "ArrayDevice07" is |
| the descriptor name associated with element index 7 then this invocation |
| is equivalent to the previous one: |
| .PP |
| sg_ses \-\-descriptor=ArrayDevice07 \-\-set=2:1:1 /dev/sg3 |
| .PP |
| Further the byte 2, bit 1 (for 1 bit) field in the Array Device Slot Control |
| element is RQST IDENT for asking a disk carrier to flash a LED so it can |
| be located. In this case "ident" (or "locate") is accepted as an acronym |
| for that field: |
| .PP |
| sg_ses \-\-descriptor=ArrayDevice07 \-\-set=ident /dev/sg3 |
| .PP |
| To stop that LED flashing: |
| .PP |
| sg_ses \-\-dev\-slot\-num=7 \-\-clear=ident /dev/sg3 |
| .PP |
| The above assumes the descriptor name 'ArrayDevice07' corresponds to device |
| slot number 7. |
| .PP |
| Now for an example of a more general but lower level technique for changing |
| a modifiable diagnostic dpage. The String (In and Out) diagnostics dpage is |
| relatively simple (compared with the Enclosure Status/Control dpage). However |
| the use of this lower level technique is awkward involving three steps: read, |
| modify then write. First check the current String (In) dpage contents: |
| .PP |
| sg_ses \-\-page=str /dev/bsg/6:0:2:0 |
| .PP |
| Now the "read" step. The following command will send the contents of the |
| String dpage (from byte 4 onwards) to stdout. The output will be in ASCII |
| hex with pairs of hex digits representing a byte, 16 pairs per line, |
| space separated. The redirection puts stdout in a file called "t": |
| .PP |
| sg_ses \-\-page=str \-\-raw /dev/bsg/6:0:2:0 > t |
| .PP |
| Then with the aid of the SES\-3 document (in revision 3: section 6.1.6) |
| use your favourite editor to change t. The changes can be sent to the |
| device with: |
| .PP |
| sg_ses \-\-page=str \-\-control \-\-data=\- /dev/bsg/6:0:2:0 < t |
| .PP |
| If the above is successful, the String dpage should have been changed. To |
| check try: |
| .PP |
| sg_ses \-\-page=str /dev/bsg/6:0:2:0 |
| .PP |
| To change the nickname on the main enclosure: |
| .PP |
| sg_ses \-\-nickname='1st enclosure' \-\-control /dev/bsg/6:0:2:0 |
| .PP |
| To capture the whole state of an enclosure (from a SES perspective) for |
| later analysis, this can be done: |
| .PP |
| sg_ses \-\-page=all \-HHHH /dev/sg5 > enc_sg5_all.hex |
| .PP |
| Note that if there are errors or warnings they will be sent to stderr so |
| they will appear on the command line (since only stdout is redirected). |
| A text editor could be used to inspect enc_sg5_all.hex . If all looks in |
| order at some later time, potentially on a different machine where |
| enc_sg5_all.hex has been copied, a "join" could be done. Note that join |
| reflects the state of the enclosure when the capture was done. |
| .PP |
| sg_ses \-\-data=@enc_sg5_all.hex \-\-status \-\-join |
| .SH EXIT STATUS |
| The exit status of sg_ses is 0 when it is successful. Otherwise see |
| the sg3_utils(8) man page. |
| .SH AUTHORS |
| Written by Douglas Gilbert. |
| .SH "REPORTING BUGS" |
| Report bugs to <dgilbert at interlog dot com>. |
| .SH COPYRIGHT |
| Copyright \(co 2004\-2021 Douglas Gilbert |
| .br |
| This software is distributed under a BSD\-2\-Clause license. There is NO |
| warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| .SH "SEE ALSO" |
| .B sg_inq, sg_safte, sg_senddiag, sg_ses_microcode, sg3_utils (sg3_utils); |
| .B safte\-monitor (Internet) |