.\" Automatically generated by Pod::Man 2.09 (Pod::Simple 3.04)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings.  \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote.  | will give a
.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
.\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
.\" expand to `' in nroff, nothing in troff, for use with C<>.
.tr \(*W-|\(bv\*(Tr
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
.    ds -- \(*W-
.    ds PI pi
.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
.    ds L" ""
.    ds R" ""
.    ds C` ""
.    ds C' ""
'br\}
.el\{\
.    ds -- \|\(em\|
.    ds PI \(*p
.    ds L" ``
.    ds R" ''
'br\}
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD.  Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.if \nF \{\
.    de IX
.    tm Index:\\$1\t\\n%\t"\\$2"
..
.    nr % 0
.    rr F
.\}
.\"
.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.hy 0
.if n .na
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
.    \" fudge factors for nroff and troff
.if n \{\
.    ds #H 0
.    ds #V .8m
.    ds #F .3m
.    ds #[ \f1
.    ds #] \fP
.\}
.if t \{\
.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.    ds #V .6m
.    ds #F 0
.    ds #[ \&
.    ds #] \&
.\}
.    \" simple accents for nroff and troff
.if n \{\
.    ds ' \&
.    ds ` \&
.    ds ^ \&
.    ds , \&
.    ds ~ ~
.    ds /
.\}
.if t \{\
.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
.    \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.    \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.    \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.    ds : e
.    ds 8 ss
.    ds o a
.    ds d- d\h'-1'\(ga
.    ds D- D\h'-1'\(hy
.    ds th \o'bp'
.    ds Th \o'LP'
.    ds ae ae
.    ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "ISCSI_SCST_ADM 1"
.TH ISCSI_SCST_ADM 8 "2007-05" "iSCSI SCST Target admin" "User Manuals"
.SH "NAME"
iscsi-scst-adm \- iSCSI SCST Target Administration Utility.
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
\&\fBiscsi-scst-adm \-\-op [operation] \-\-tid=[id] [\-\-sid [id]] [\-\-params [key=value,...]]\fR
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
iscsi-scst-adm is used to monitor and modify in real-time the iSCSI SCST Target
targets.
.SH "USAGE"
.IX Header "USAGE"
You'll have to get target and sessions ids from /proc/scsi_tgt/iscsi.
Some usage examples can be :
.PP
\&\fBiscsi-scst-adm \-\-op show \-\-tid=1\fR
.PP
display status of target 1 (see /proc/scsi_tgt/iscsi to get the matching target name)
.PP
\&\fBiscsi-scst-adm \-\-op new \-\-tid=2\fR
.PP
create dynamically a new target, numbered 2. \s-1CAUTION\s0 : the target will disappear if you restart iscsi-scstd, you'll have to edit /etc/iscsi-scstd.conf to make it permanent!
.SH "ERROR MESSAGES"
.IX Header "ERROR MESSAGES"
iscsi-scst-adm misses error messages. Look carefully at the \s-1STDERR\s0 output : in case of error
it will send a 3 number error code, ending with \-1, for instance :
.PP
iscsi-scstd_request 203 3 \-1
.SH "OPTIONS"
.IX Header "OPTIONS"
\&\fB\-\-op new \-\-tid=[id] \-\-params Name=[name]\fR
.PP
add a new target with [id]. If [id] is zero, the lowest free [id] is allocated automatically to the new target.
.PP
\&\fB\-\-op delete \-\-tid=[id]\fR
.PP
delete specific target with [id]. The target must
have no active sessions.
.PP
\&\fB\-\-op show \-\-tid=[id]\fR
.PP
show target parameters of target with [id].
.PP
\&\fB\-\-op show \-\-tid=[id] \-\-sid=[sid]\fR
.PP
show iSCSI parameters in effect for session [sid]. If
[sid] is \*(L"0\*(R" (zero), the configured parameters
will be displayed.
.PP
\&\fB\-\-op delete \-\-tid=[id] \-\-sid=[sid] \-\-cid=[cid]\fR
.PP
delete specific connection with [cid] in a session
with [sid] that the target with [id] has.
If the session has no connections after
the operation, the session will be deleted
automatically.
.PP
\&\fB\-\-op delete\fR
.PP
stop all activity.
.PP
\&\fB\-\-op update \-\-tid=[id] \-\-params=key1=value1,key2=value2,...\fR
.PP
change iSCSI \s-1SCST\s0 target parameters of specific
target with [id]. You can use parameters in iscsi-scstd.conf
as a key.
.PP
\&\fB\-\-op new \-\-tid=[id] \-\-user \-\-params=[user]=[name],Password=[pass]\fR
.PP
add a new account with [pass] for specific target.
[user] could be [IncomingUser] or [OutgoingUser].
If you don't specify a target (omit \-\-tid option),
you add a new account for discovery sessions.
.PP
\&\fB\-\-op show \-\-tid=[id] \-\-user\fR
.PP
show a list of CHAP accounts.
If \-\-tid is omitted or [id] is \*(L"0\*(R" (zero), discovery accounts are displayed.
.PP
\&\fB\-\-op show \-\-tid=[id] \-\-user \-\-params=[user]=[name]\fR
.PP
show CHAP account information for the account specified by [name].
[user] can be [IncomingUser] or [OutgoingUser].
If \-\-tid is omitted or [id] is \*(L"0\*(R" (zero), [name] is supposed to be a discovery account name.
.PP
\&\fB\-\-op delete \-\-tid=[id] \-\-user \-\-params=[user]=[name]\fR
.PP
delete specific account having [name] of specific
target. [user] could be [IncomingUser] or
[OutgoingUser].
If you don't specify a target (omit \-\-tid option),
you delete the account for discovery sessions.
.PP
\&\fB\-\-version\fR
.PP
display version and exit
.PP
\&\fB\-\-help\fR
.PP
display a list of available options and exits
.SH "KNOWN ISSUES"
.IX Header "KNOWN ISSUES"
.IP "\(bu" 4
iscsi-scst-adm doesn't return any human-readable error message, only error codes.
.IP "\(bu" 4
iscsi-scst-adm doesn't modify or read the /etc/iscsi-scstd.conf iscsi-scstd configuration file.
.IP "\(bu" 4
iscsi-scst-adm can't use target names or aliases, only the tid found in /proc/scsi_tgt/iscsi.
.IP "\(bu" 4
/proc/scsi_tgt/iscsi may list inactive sessions if the initiator doesn't logout properly.
.PP
Report bugs to <scst\-devel@lists.sourceforge.net>.
.SH "FILES"
.IX Header "FILES"
/proc/scsi_tgt/iscsi
.SH "SEE ALSO"
.IX Header "SEE ALSO"
\&\fIiscsi-scstd\fR\|(8),\fIiscsi-scstd.conf\fR\|(5)
.\"man page written by Emmanuel Florac <eflorac@intellique.com"
.\"distributed under GPL v2 licence"
