2 ###############################################################################
3 # Conveniently create and set scsi logging level, show SCSI_LOG fields in human
6 # Copyright IBM Corp. 2006.
7 ###############################################################################
10 SCRIPTNAME
="scsi_logging_level"
12 declare -i LOG_ERROR
=0
13 declare -i LOG_TIMEOUT
=0
15 declare -i LOG_MLQUEUE
=0
16 declare -i LOG_MLCOMPLETE
=0
17 declare -i LOG_LLQUEUE
=0
18 declare -i LOG_LLCOMPLETE
=0
19 declare -i LOG_HLQUEUE
=0
20 declare -i LOG_HLCOMPLETE
=0
21 declare -i LOG_IOCTL
=0
40 OPTS
=`getopt -o hvcgsa:E:T:S:I:M:L:H: --long \
41 help,version,create,get,set,all:,error:,timeout:,scan:,ioctl:,\
42 midlevel:,mlqueue:,mlcomplete:,lowlevel:,llqueue:,llcomplete:,\
43 highlevel:,hlqueue:,hlcomplete: -n \'$SCRIPTNAME\' -- "$@"`
50 $SCRIPTNAME: version %S390_TOOLS_VERSION%
51 Copyright IBM Corp. 2006
55 # print usage and help
59 Usage: $SCRIPTNAME [OPTIONS]
61 Create, get or set scsi logging level.
65 -h, --help print this help
66 -v, --version print version information
67 -s, --set create and set logging level as specified on
69 -g, --get get current logging level and display it
70 -c, --create create logging level as specified on command line
71 -a, --all specify value for all SCSI_LOG fields
72 -E, --error specify SCSI_LOG_ERROR
73 -T, --timeout specify SCSI_LOG_TIMEOUT
74 -S, --scan specify SCSI_LOG_SCAN
75 -M, --midlevel specify SCSI_LOG_MLQUEUE and SCSI_LOG_MLCOMPLETE
76 --mlqueue specify SCSI_LOG_MLQUEUE
77 --mlcomplete specify SCSI_LOG_MLCOMPLETE
78 -L, --lowlevel specify SCSI_LOG_LLQUEUE and SCSI_LOG_LLCOMPLETE
79 --llqueue specify SCSI_LOG_LLQUEUE
80 --llcomplete specify SCSI_LOG_LLCOMPLETE
81 -H, --highlevel specify SCSI_LOG_HLQUEUE and SCSI_LOG_HLCOMPLETE
82 --hlqueue specify SCSI_LOG_HLQUEUE
83 --hlcomplete specify SCSI_LOG_HLCOMPLETE
84 -I, --ioctl specify SCSI_LOG_IOCTL
86 Exactly one of the options "-c", "-g" and "-s" has to be specified.
87 Valid values for SCSI_LOG fields are integers from 0 to 7.
89 Note: Several SCSI_LOG fields can be specified using several options.
90 When multiple options specify same SCSI_LOG field the most specific
91 option has precedence.
93 Example: "scsi_logging_level --hlqueue 3 --hlcomplete 2 --all 1 -s" sets
94 SCSI_LOG_HLQUEUE=3, SCSI_LOG_HLCOMPLETE=2 and assigns all other SCSI_LOG
101 if [ `echo -n $1 | tr --complement [:digit:] 'a' | grep -s 'a'` ]
103 invalid_cmdline
"log level '$1' out of range [0, 7]"
106 if [ $1 -lt 0 -o $1 -gt 7 ]
108 invalid_cmdline
"log level '$1' out of range [0, 7]"
112 # check cmd line arguments
117 -a|
--all) _ALL
=$2; check_level
$2
119 -c|
--create) CREATE
=1;
127 -v|
--version) printversion
129 -E|
--error) _ERROR
=$2; check_level
$2
131 -T|
--timeout) _TIMEOUT
=$2; check_level
$2
133 -S|
--scan) _SCAN
=$2; check_level
$2
135 -M|
--midlevel) _ML
=$2; check_level
$2
137 --mlqueue) _MLQUEUE
=$2; check_level
$2
139 --mlcomplete) _MLCOMPLETE
=$2; check_level
$2
141 -L|
--lowlevel) _LL
=$2; check_level
$2
143 --llqueue) _LLQUEUE
=$2; check_level
$2
145 --llcomplete) _LLCOMPLETE
=$2; check_level
$2
147 -H|
--highlevel) _HL
=$2; check_level
$2
149 --hlqueue) _HLQUEUE
=$2; check_level
$2
151 --hlcomplete) _HLCOMPLETE
=$2; check_level
$2
153 -I|
--ioctl) _IOCTL
=$2; check_level
$2
156 *) echo "Internal error!" ; exit 1;;
162 invalid_cmdline invalid parameter $
*
165 if [ $GET = "1" -a $SET = "1" ]
167 invalid_cmdline options
\'-c\', \'-g\' and
\'-s\' are mutual exclusive
168 elif [ $GET = "1" -a $CREATE = "1" ]
170 invalid_cmdline options
\'-c\', \'-g\' and
\'-s\' are mutual exclusive
171 elif [ $SET = "1" -a $CREATE = "1" ]
173 invalid_cmdline options
\'-c\', \'-g\' and
\'-s\' are mutual exclusive
176 LOG_ERROR
=${_ERROR:-${_ALL:-0}}
177 LOG_TIMEOUT
=${_TIMEOUT:-${_ALL:-0}}
178 LOG_SCAN
=${_SCAN:-${_ALL:-0}}
179 LOG_MLQUEUE
=${_MLQUEUE:-${_ML:-${_ALL:-0}}}
180 LOG_MLCOMPLETE
=${_MLCOMPLETE:-${_ML:-${_ALL:-0}}}
181 LOG_LLQUEUE
=${_LLQUEUE:-${_LL:-${_ALL:-0}}}
182 LOG_LLCOMPLETE
=${_LLCOMPLETE:-${_LL:-${_ALL:-0}}}
183 LOG_HLQUEUE
=${_HLQUEUE:-${_HL:-${_ALL:-0}}}
184 LOG_HLCOMPLETE
=${_HLCOMPLETE:-${_HL:-${_ALL:-0}}}
185 LOG_IOCTL
=${_IOCTL:-${_ALL:-0}}
190 echo "$SCRIPTNAME: $*"
191 echo "$SCRIPTNAME: Try '$SCRIPTNAME --help' for more information."
197 echo "Current scsi logging level:"
198 LEVEL
=`sysctl -n dev.scsi.logging_level`
201 echo "$SCRIPTNAME: could not read scsi logging level" \
202 "(kernel probably without SCSI_LOGGING support)"
209 echo "dev.scsi.logging_level = $LEVEL"
211 LOG_ERROR
=$
((($LEVEL>>$_ERROR_SHIFT) & 7))
212 LOG_TIMEOUT
=$
((($LEVEL>>$_TIMEOUT_SHIFT) & 7))
213 LOG_SCAN
=$
((($LEVEL>>$_SCAN_SHIFT) & 7))
214 LOG_MLQUEUE
=$
((($LEVEL>>$_MLQUEUE_SHIFT) & 7))
215 LOG_MLCOMPLETE
=$
((($LEVEL>>$_MLCOMPLETE_SHIFT) & 7))
216 LOG_LLQUEUE
=$
((($LEVEL>>$_LLQUEUE_SHIFT) & 7))
217 LOG_LLCOMPLETE
=$
((($LEVEL>>$_LLCOMPLETE_SHIFT) & 7))
218 LOG_HLQUEUE
=$
((($LEVEL>>$_HLQUEUE_SHIFT) & 7))
219 LOG_HLCOMPLETE
=$
((($LEVEL>>$_HLCOMPLETE_SHIFT) & 7))
220 LOG_IOCTL
=$
((($LEVEL>>$_IOCTL_SHIFT) & 7))
222 echo "SCSI_LOG_ERROR=$LOG_ERROR"
223 echo "SCSI_LOG_TIMEOUT=$LOG_TIMEOUT"
224 echo "SCSI_LOG_SCAN=$LOG_SCAN"
225 echo "SCSI_LOG_MLQUEUE=$LOG_MLQUEUE"
226 echo "SCSI_LOG_MLCOMPLETE=$LOG_MLCOMPLETE"
227 echo "SCSI_LOG_LLQUEUE=$LOG_LLQUEUE"
228 echo "SCSI_LOG_LLCOMPLETE=$LOG_LLCOMPLETE"
229 echo "SCSI_LOG_HLQUEUE=$LOG_HLQUEUE"
230 echo "SCSI_LOG_HLCOMPLETE=$LOG_HLCOMPLETE"
231 echo "SCSI_LOG_IOCTL=$LOG_IOCTL"
236 echo "New scsi logging level:"
237 sysctl
-q -w dev.scsi.logging_level
=$LEVEL
240 echo "$SCRIPTNAME: could not write scsi logging level" \
241 "(kernel probably without SCSI_LOGGING support)"
245 create_logging_level
()
247 LEVEL
=$
((($LOG_ERROR & 7)<<$_ERROR_SHIFT))
248 LEVEL
=$
(($LEVEL|
(($LOG_TIMEOUT & 7)<<$_TIMEOUT_SHIFT)))
249 LEVEL
=$
(($LEVEL|
(($LOG_SCAN & 7)<<$_SCAN_SHIFT)))
250 LEVEL
=$
(($LEVEL|
(($LOG_MLQUEUE & 7)<<$_MLQUEUE_SHIFT)))
251 LEVEL
=$
(($LEVEL|
(($LOG_MLCOMPLETE & 7)<<$_MLCOMPLETE_SHIFT)))
252 LEVEL
=$
(($LEVEL|
(($LOG_LLQUEUE & 7)<<$_LLQUEUE_SHIFT)))
253 LEVEL
=$
(($LEVEL|
(($LOG_LLCOMPLETE & 7)<<$_LLCOMPLETE_SHIFT)))
254 LEVEL
=$
(($LEVEL|
(($LOG_HLQUEUE & 7)<<$_HLQUEUE_SHIFT)))
255 LEVEL
=$
(($LEVEL|
(($LOG_HLCOMPLETE & 7)<<$_HLCOMPLETE_SHIFT)))
256 LEVEL
=$
(($LEVEL|
(($LOG_IOCTL & 7)<<$_IOCTL_SHIFT)))
270 elif [ $CREATE = "1" ]
275 invalid_cmdline missing option
\'-g\', \'-s\' or
\'-c\'