Please Note:
>>> Up to and including sg3_utils-1.33 the Solaris code was built
>>> and tested on an OpenSolaris VM run with VirtualBox on Ubuntu
>>> 11.10 . Now with Ubuntu 12.04 those VMs crash immediately when
>>> started with VirtualBox. Further, Oracle (who owns SUN and thus
>>> Solaris) no longer supports OpenSolaris and its package
>>> repository has been withdrawn. The author can find no generic VMs
>>> for Oracle Solaris 11 that run on VirtualBox or VMWare. The author
>>> is also displeased with the withdrawal of the Open Software
>>> OS and is disinclined to build a Solaris 11 system just to
>>> virtualize it.
>>> So as of sg3_utils-1.34 the Solaris port is provided "as-is" without
>>> testing on a Solaris platform.

Douglas Gilbert
13th October 2012



Introduction
============
The Solaris port of sg3_utils contains those utilities that are
_not_ specific to Linux.

The dd variants from the sg3_utils package (e.g. sg_dd) rely on too many
Linux idiosyncrasies to be easily ported. A new package called 'ddpt'
contains a utility with similar functionality to sg_dd and is available
for Solaris.

Supported Utilities
===================
Here is a list of utilities that have been ported:
    sg_compare_and_write
    sg_decode_sense
    sg_format
    sg_get_config
    sg_get_lba_status
    sg_ident
    sg_inq          [dropped ATA IDENTIFY DEVICE capability]
    sg_logs
    sg_luns
    sg_modes
    sg_persist
    sg_opcodes
    sg_prevent
    sg_raw
    sg_rdac
    sg_read_block_limts
    sg_read_buffer
    sg_read_long
    sg_readcap
    sg_reassign
    sg_referrals
    sg_requests
    sg_rmsn
    sg_rtpg
    sg_safte
    sg_sanitize
    sg_sat_identify
    sg_sat_phy_event
    sg_sat_set_features
    sg_senddiag
    sg_ses
    sg_start
    sg_stpg
    sg_sync
    sg_turs
    sg_unmap
    sg_verify
    sg_vpd
    sg_wr_mode
    sg_write_buffer
    sg_write_long
    sg_write_same

Most utility names are indicative of the main SCSI command
that they execute.  Some utilities are slightly higher level, for
example sg_ses fetches SCSI Enclosure Services (SES) status pages and
can send control pages. Each utility has a man page (placed in
section 8). An overview of sg3_utils can be found at:
http://sg.danny.cz/sg/sg3_utils.html .
A copy of the "sg3_utils.html" file is in the "doc" subdirectory.


The executables and library can be built from the source code in
the tarball and installed with the familiar
"./configure ; make ; make install" sequence. If this fails try
running the "./autogen.sh" script prior to that sequence. There
are generic instruction on configure and friend in the INSTALL file.

Some man pages have examples which use Linux device names which
hopefully will not confuse the Solaris users.

Device naming
=============
In Solaris, SCSI device names below the '/dev' directory have a
form like: c5t4d3s2 where the number following "c" is the controller
(HBA) number, the number following "t" is the target number (from
the SCSI parallel interface days) and the number following "d" is
the LUN. Following the "s" is the slice number which is related to
a partition and by convention "s2" is the whole disk.

OpenSolaris also has a c5t4d3p2 form where the number following
the "p" is the partition number apart from "p0" which is the whole
disk. So a whole disk may be referred to as either:
  - c5t4d3
  - c5t4d3s2
  - c5t4d3p0

And these device names are duplicated in the /dev/dsk and /dev/rdsk
directories. The former is the block device name and the latter
is for "raw" (or char device) access which is what sg3_utils needs.
So in OpenSolaris something of the form:
   sg_inq /dev/rdsk/c5t4d3p0
should work. If it doesn't add a '-vvv' option. If that is attempted
on the /dev/dsk/c5t4d3p0 variant an inappropriate ioctl for device
error will result.

The device names within the /dev directory are typically symbolic
links to much longer topological names in the /device directory.

In Solaris cd/dvd/bd players seem to be treated as disks and so are
found in the /dev/rdsk directory. Tape drives appear in the /dev/rmt
directory.

There is also a sgen (SCSI generic) driver which by default does not
attach to any device. See the /kernel/drv/sgen.conf file to control
what is attached. Any attached device will have a device name of
the form /dev/scsi/c5t4d3 .

Listing available SCSI devices in Solaris seems to be a challenge.
"Use the 'format' command" advice works but seems a very dangerous
way to list devices. [It does prompt again before doing any damage.]
'devfsadm -Cv' cleans out the clutter in the /dev/rdsk directory,
only leaving what is "live". The "cfgadm -v" command looks promising.

Details
=======
The ported utilities listed above, all use SCSI command functions
declared in sg_cmds_basic.h and sg_cmds_extra.h . Those SCSI command
functions are implemented in the corresponding ".c" files. The ".c"
files pass SCSI commands to the host operating system via an interface
declared in sg_pt.h . There are currently five implementations of that
interface depending on the host operating system:
  - sg_pt_linux.c
  - sg_pt_freebsd.c
  - sg_pt_osf1.c  [Tru64]
  - sg_pt_solaris.c
  - sg_pt_win32.c

The sg_pt_solaris.c file uses the "uscsi" SCSI pass through mechanism. There
seems to be no corresponding ATA pass through and recent SATA disks do not
seem to have a SAT layer in front of them (within Solaris). If SAT is
present (perhaps externally or within a HBA) then that would allow SATA
disks to accept SCSI commands including the SCSI ATA PASS THROUGH commands.


Douglas Gilbert
14th January 2013
