#! /bin/bash ############################################################################### # Conveniently create and set scsi logging level, show SCSI_LOG fields in human # readable form. # # (C) Copyright IBM Corp. 2006 # # Modified by D. Gilbert to replace the use of sysctl [20080218] # Lat change: D. Gilbert 20150219 ############################################################################### REVISION="1.0" SCRIPTNAME="scsi_logging_level" declare -i LOG_ERROR=0 declare -i LOG_TIMEOUT=0 declare -i LOG_SCAN=0 declare -i LOG_MLQUEUE=0 declare -i LOG_MLCOMPLETE=0 declare -i LOG_LLQUEUE=0 declare -i LOG_LLCOMPLETE=0 declare -i LOG_HLQUEUE=0 declare -i LOG_HLCOMPLETE=0 declare -i LOG_IOCTL=0 declare -i LEVEL=0 SET=0 GET=0 CREATE=0 OPTS=$(getopt -o hvcgsa:E:T:S:I:M:L:H: --long \ help,version,create,get,set,all:,error:,timeout:,scan:,ioctl:,\ midlevel:,mlqueue:,mlcomplete:,lowlevel:,llqueue:,llcomplete:,\ highlevel:,hlqueue:,hlcomplete: -n \'$SCRIPTNAME\' -- "$@") eval set -- "$OPTS" # print version info printversion() { cat <>3)) LOG_TIMEOUT=$((LEVEL & 7)); LEVEL=$((LEVEL>>3)) LOG_SCAN=$((LEVEL & 7)); LEVEL=$((LEVEL>>3)) LOG_MLQUEUE=$((LEVEL & 7)); LEVEL=$((LEVEL>>3)) LOG_MLCOMPLETE=$((LEVEL & 7)); LEVEL=$((LEVEL>>3)) LOG_LLQUEUE=$((LEVEL & 7)); LEVEL=$((LEVEL>>3)) LOG_LLCOMPLETE=$((LEVEL & 7)); LEVEL=$((LEVEL>>3)) LOG_HLQUEUE=$((LEVEL & 7)); LEVEL=$((LEVEL>>3)); LOG_HLCOMPLETE=$((LEVEL & 7)); LEVEL=$((LEVEL>>3)); LOG_IOCTL=$((LEVEL & 7)) echo "SCSI_LOG_ERROR=$LOG_ERROR" echo "SCSI_LOG_TIMEOUT=$LOG_TIMEOUT" echo "SCSI_LOG_SCAN=$LOG_SCAN" echo "SCSI_LOG_MLQUEUE=$LOG_MLQUEUE" echo "SCSI_LOG_MLCOMPLETE=$LOG_MLCOMPLETE" echo "SCSI_LOG_LLQUEUE=$LOG_LLQUEUE" echo "SCSI_LOG_LLCOMPLETE=$LOG_LLCOMPLETE" echo "SCSI_LOG_HLQUEUE=$LOG_HLQUEUE" echo "SCSI_LOG_HLCOMPLETE=$LOG_HLCOMPLETE" echo "SCSI_LOG_IOCTL=$LOG_IOCTL" } set_logging_level() { echo "New scsi logging level:" # sysctl -q -w dev.scsi.logging_level=$LEVEL echo $LEVEL > /proc/sys/dev/scsi/logging_level if [ $? != 0 ] then echo "$SCRIPTNAME: could not write scsi logging level $LEVEL" echo " kernel does not have SCSI_LOGGING support or needs superuser" exit 1 fi } create_logging_level() { LEVEL=$((LOG_IOCTL & 7)); LEVEL=$((LEVEL<<3)) LEVEL=$((LEVEL|(LOG_HLCOMPLETE & 7))); LEVEL=$((LEVEL<<3)) LEVEL=$((LEVEL|(LOG_HLQUEUE & 7))); LEVEL=$((LEVEL<<3)) LEVEL=$((LEVEL|(LOG_LLCOMPLETE & 7))); LEVEL=$((LEVEL<<3)) LEVEL=$((LEVEL|(LOG_LLQUEUE & 7))); LEVEL=$((LEVEL<<3)) LEVEL=$((LEVEL|(LOG_MLCOMPLETE & 7))); LEVEL=$((LEVEL<<3)) LEVEL=$((LEVEL|(LOG_MLQUEUE & 7))); LEVEL=$((LEVEL<<3)) LEVEL=$((LEVEL|(LOG_SCAN & 7))); LEVEL=$((LEVEL<<3)) LEVEL=$((LEVEL|(LOG_TIMEOUT & 7))); LEVEL=$((LEVEL<<3)) LEVEL=$((LEVEL|(LOG_ERROR & 7))) } check_cmdline "$@" if [ $SET = "1" ] then create_logging_level set_logging_level show_logging_level elif [ $GET = "1" ] then get_logging_level show_logging_level elif [ $CREATE = "1" ] then create_logging_level show_logging_level else invalid_cmdline missing option \'-g\', \'-s\' or \'-c\' fi