Schily's USER COMMANDS                                   RSCSI(1)


NAME

     rscsi - remote generic SCSI transport protocol server


SYNOPSIS

     /opt/schily/sbin/rscsi


DESCRIPTION

     The rscsi command is a remote generic SCSI transport  server
     program.   rscsi  is  a  program  that is run locally on the
     machine with SCSI devices, it is  used  by  remote  programs
     like  cdrecord(1),  cdda2wav(1),  readcd(1),  and sformat(1)
     that like to access SCSI  devices  through  an  interprocess
     communication  connection  via  libscg.   rscsi  is normally
     started up with an rexec(3) or rcmd(3) call but it may  also
     be  connected via an internal pipe to an ssh(1) session that
     was set up by the remote user.

     The rscsi program accepts scg_open, scg_close,  scg_cmd  and
     similar  requests  that  are all related to the interface of
     libscg.  rscsi performs the commands and then responds  with
     a status indication.

     The rscsi program is prepared to  be  installed  as  a  user
     shell  in  the  passwd  file  to create remote SCSI specific
     logins and security checking.

     All requests are send to the rscsi program in ASCII and thus
     are byte order and machine independent.

     All responses are send back in ASCII and in one of the  fol-
     lowing two forms.

     All successful commands (except for  the  "S"  command  that
     sends SCSI commands) have responses of

          Anumber\n

     where number is the ASCII representation of a decimal number
     that  usually is the return code of the corresponding system
     call or function.

     All unsuccessful commands are responded to with

          Eerror-number\nerror-message\nxerror-len\nxerror-txt

     where error-number is one  of  the  possible  error  numbers
     described  in intro(2), and error-message is the correspond-
     ing error string as retrieved by strerror(3), xerror-len  is
     the  length  of the additional error text xerror-txt and may
     be 0. In case xerror-len is 0, no xerror-txt is send.   Note
     that  a  failed  SCSI  command that returned SCSI sense data

Joerg Schilling      Last change: 2020/09/04                    1


Schily's USER COMMANDS                                   RSCSI(1)

     counts as a successful command and does not use the  default
     error format.

     The rscsi protocol implements the following commands:

          Vwhat\n     Return the version for several instances of
                      the  software  in  the  rscsi  server.  The
                      parameter  what  may  have  the   following
                      values:

                      0    Return SCG_VERSION from libscg on  the
                           rscsi  server.   This returns the ver-
                           sion string for  the  low  level  SCSI
                           transport adaptation layer.

                      1    Return SCG_AUTHOR from libscg  on  the
                           rscsi server.  This returns the author
                           name for the low level SCSI  transport
                           adaptation layer.

                      2    Return SCG_SCCS_ID from libscg on  the
                           rscsi  server.   This returns the SCCS
                           version string for the low level  SCSI
                           transport adaptation layer.

                      20   Return SCG_KVERSION from libscg on the
                           rscsi  server.   This returns the ver-
                           sion of kernel instance of the  driver
                           that  is underneath the low level SCSI
                           transport adaptation layer.

                           This call may not be supported for all
                           operating systems.

                      This    command    corresponds    to    the
                      scg_version(3) function from libscg.

          Odevice\n   Open the specified SCSI device.

                      See the description of the dev=  option  in
                      cdrecord(1)  for more information on possi-
                      ble values of the device parameter.

                      If a device is already open, it  is  closed
                      before a new open is performed.

                      This command corresponds to the scg_open(3)
                      function from libscg.

                      The return value in case of success is 0.

Joerg Schilling      Last change: 2020/09/04                    2


Schily's USER COMMANDS                                   RSCSI(1)

          Cdevice\n   Close the currently open  device  or  file.
                      The argument device is ignored.

                      This    command    corresponds    to    the
                      scg_close(3) function from libscg.

                      The return value is the return  value  from
                      the scg_close(3) function.

          Dsize\n     Set  up  the  maximum  DMA  size  for   the
                      currently   open  SCSI  device.   The  size
                      parameter is the desired DMA size in bytes.

                      This    command    corresponds    to    the
                      scg_bufsize(3) function from libscg.

                      The returned value is the actual  DMA  size
                      that  could  be  set up.  This value may be
                      lower than the size parameter.

          Msize\n     Allocate a buffer  suitable  for  SCSI  DMA
                      transfers.

                      This    command    corresponds    to    the
                      scg_getbuf(3) function from libscg.

                      The returned value is the actual  DMA  size
                      that  could  be  set up.  This value may be
                      lower than the size parameter.

          F\n         Free a previously allocated buffer.

                      This    command    corresponds    to    the
                      scg_freebuf(3) function from libscg.

                      The return value in case of success is 0.

          N\n         Retrieve the maximum  permitted  value  for
                      the SCSI bus number.

                      This    command    corresponds    to    the
                      scg_numbus(3) function from libscg.

                      The return value is the return  value  from
                      the scg_numbus(3) function.

          Bbusno\nchan\n
                      Checks whether there is a SCSI bus  with  a
                      busnumber that is equal to busno.  The chan
                      parameter is currently ignored.

                      This    command    corresponds    to    the

Joerg Schilling      Last change: 2020/09/04                    3


Schily's USER COMMANDS                                   RSCSI(1)

                      scg_havebus(3) function from libscg.

                      The return value is the return  value  from
                      the scg_havebus(3) function.

          Tbusno\nchan\ntarget\nlun\n
                      Set the SCSI target address to busno,  tar-
                      get,  lun.  The parameter chan is currently
                      ignored.

                      This    command    corresponds    to    the
                      scg_settarget(3) function from libscg.

                      The return value is the return  value  from
                      the scg_havebus(3) function.

          I\n         Retrieve the  SCSI  initiator  ID  for  the
                      current SCSI bus.

                      This    command    corresponds    to    the
                      scg_initiator_id(3) function from libscg.

                      The return value is the return  value  from
                      the scg_initiator_id(3) function.

          A\n         Check whether the current target is or  may
                      be an ATAPI device.

                      This    command    corresponds    to    the
                      scg_isatapi(3) function from libscg.

                      The return value is the return  value  from
                      the scg_isatapi(3) function.

          Rwhat\n     Perform a SCSI reset.  The  parameter  what
                      may have the following values:

                      0    Test whether a SCSI reset is supported
                           as with the SCG_RESET_NOP parameter.

                      1    Perform a SCSI target  reset  as  with
                           the SCG_RESET_TGT parameter.

                      2    Perform a SCSI bus reset as  with  the
                           SCG_RESET_BUS parameter.

                      This    command    corresponds    to    the
                      scg_reset(3) function from libscg.

                      The return value is the return  value  from
                      the scg_reset(3) function.

Joerg Schilling      Last change: 2020/09/04                    4


Schily's USER COMMANDS                                   RSCSI(1)

          Scount\nflags\ncdb_len\nsense_len\ntimeout\n
                      Send  a  SCSI  command  to  the   currently
                      selected  target.   This  command takes the
                      following parameters:

                      count
                           The DMA count for this command. If the
                           command  is  a  command that transfers
                           data to the target, the  related  data
                           is  send  directly after the SCSI com-
                           mand  descriptor   block.    that   is
                           described above.

                      flags
                           The flags that apply to this SCSI com-
                           mand:

                           1    Tell the  kernel  that  the  SCSI
                                command  will  transfer data from
                                the target  to  the  host.   This
                                corresponds  to  the  flag  value
                                SCG_RECV_DATA.

                           2    Tell the kernel to send the  SCSI
                                command with disconnect/reconnect
                                enabled.  This corresponds to the
                                flag  value  SCG_DISRE_ENA.  This
                                flag  is  not  supported  on  all
                                platforms.

                           4    Make the kernel  silent  on  SCSI
                                errors.   This corresponds to the
                                flag value SCG_SILENT.  This flag
                                is  not  supported  on  all plat-
                                forms.

                           8    Tell the kernel to retry the SCSI
                                command  in  case  of a retryable
                                SCSI   transport   error.    This
                                corresponds  to  the  flag  value
                                SCG_CMD_RETRY.  This flag is  not
                                supported on all platforms.

                           16   Tell the kernel to send the  SCSI
                                command   with  parity  disabled.
                                This  corresponds  to  the   flag
                                value SCG_NOPARITY.  This flag is
                                not supported on all platforms.

                      cdb_len
                           The SCSI command descriptor length for
                           this   command.    The   SCSI  command

Joerg Schilling      Last change: 2020/09/04                    5


Schily's USER COMMANDS                                   RSCSI(1)

                           descriptor has to  be  send  with  the
                           correct  length directly after the new
                           line past the timeout value.

                      sense_len
                           The  amount  of  sense  data  that  is
                           expected  in  return  of a failed SCSI
                           command that produces SCSI sense data.

                      timeout
                           The timeout for the  SCSI  command  in
                           seconds.  Fractions of a second may be
                           specified by sending a floating  point
                           number.

                      The reply for a SCSI command that could  be
                      send to the target is:

                      Acount\nerror\nerrno\nscb\nsense_count\n

                      count
                           The DMA count  of  any  data  returned
                           from  the  target.   If  this count is
                           nonzero,  the  data   is   send   back
                           directly  after  the  reply block men-
                           tioned above.

                      error
                           A SCSI error classification  from  one
                           of the following values:

                           0    No error  occurred.   This  value
                                corresponds    to    the    value
                                SCG_NO_ERROR .

                           1    A retryable error occurred  while
                                trying to transport the SCSI com-
                                mand to the target.   This  value
                                corresponds    to    the    value
                                SCG_RETRYABLE .

                           2    A fatal error occurred while try-
                                ing to transport the SCSI command
                                to  the   target.    This   value
                                corresponds    to    the    value
                                SCG_FATAL .

Joerg Schilling      Last change: 2020/09/04                    6


Schily's USER COMMANDS                                   RSCSI(1)

                           3    A SCSI  timeout  occurred.   This
                                value  corresponds  to  the value
                                SCG_TIMEOUT .

                      errno
                           Any possible UNIX errno value for  the
                           SCSI command.

                      scb  The SCSI status byte

                      sense_count
                           The sense count returned for the  SCSI
                           command.   The SCSI sense data is send
                           back directly after any possible  SCSI
                           DMA data received from the target.

                           This  command   corresponds   to   the
                           scg_cmd(3) function from libscg.

                           The return value is the  return  value
                           from the scg_cmd(3) function.

     Any other command causes rscsi to exit.


FILES

     /etc/default/rscsi
          Default values can be set for the following options  in
          /etc/default/rscsi.  For example:

          DEBUG=/tmp/rscsi.debug
          USER=rscsi
          ACCESS=rscsi   myhost.mydomain.org 1    -1   3    0

          All keywords must be on the beginning of a line.

          DEBUG
               If you like to get debug information, set this  to
               a  file name where rscsi should put debug informa-
               tion.

          USER The name of a user (local  to  the  RSCSI  server)
               that  may  use  the  services of the rscsi server.
               More than one USER=name line is possible.  A  line
               USER=* grants access to all users.

          ACCESS
               This  keyword  is  followed  by   six   parameters
               separated  by a TAB.  The name of a user (local to
               the RSCSI server host) that may use  the  services

Joerg Schilling      Last change: 2020/09/04                    7


Schily's USER COMMANDS                                   RSCSI(1)

               of the rscsi server followed by the name of a host
               from where operation is granted followed by a SCSI
               device  specification  that  is made of bus-number
               channel (ignored for now) target-id and  lun  that
               specify a SCSI device that may be accessed if this
               ACCESS line matches.  If one or  more  entries  of
               the bus-number channel target-id lun specification
               is set to -1, this matches any possible value  for
               the related part of the SCSI device specification.
               More than one ACCESS=name host SCSI-device line is
               possible.

               If standard input of rscsi is not a socket from  a
               remote  host,  rscsi  will  compare the host entry
               from   /etc/default/rscsi   with   the   following
               strings:

               PIPE      If stdin is a UNIX pipe.

                         If you like to allow remote  connections
                         that  use  the ssh protocol, you need to
                         use the word PIPE instead  of  the  real
                         hostname in the matching ACCESS= line.

               ILLEGAL_SOCKET
                         If  getpeername()  does  not  work   for
                         stdin.

               NOT_IP    If getpeername() works for stdin but  is
                         not connected to an internet socket.


SEE ALSO

     cdrecord(1),  cdda2wav(1),  readcd(1),  sformat(1),  ssh(1),
     intro(2),  open(2),  close(2),  read(2), write(2), ioctl(2),
     getpeername(3) rcmd(3), rexec(3), strerror(3)


DIAGNOSTICS

     All responses are send to the network connection.  They  use
     the form described above.


NOTES

     The possibility to create a debug file by calling rscsi file
     has  been  disabled  for  security  reasons.  If you like to
     debug rscsi  edit  /etc/default/rscsi  and  insert  a  DEBUG
     entry.


BUGS

     None known.


HISTORY


Joerg Schilling      Last change: 2020/09/04                    8


Schily's USER COMMANDS                                   RSCSI(1)

     The rscsi command has been developed by Joerg  Schilling  in
     June 2000.


AUTHOR

     Joerg Schilling
     D-13353 Berlin
     Germany

     Mail bugs and suggestions to:

     joerg@schily.net


INTERFACE STABILITY

     The interfaces provided by rscsi are designed for long  term
     stability.   As  rscsi depends on interfaces provided by the
     underlying operating system, the stability of the interfaces
     offered  by  rscsi depends on the interface stability of the
     OS interfaces. Modified interfaces in  the  OS  may  enforce
     modified interfaces in rscsi.

Joerg Schilling      Last change: 2020/09/04                    9


Man(1) output converted with man2html


FhG Schily's Home VED powered