diff options
Diffstat (limited to 'scripts/scsi_satl')
-rwxr-xr-x | scripts/scsi_satl | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/scripts/scsi_satl b/scripts/scsi_satl new file mode 100755 index 00000000..08042ae3 --- /dev/null +++ b/scripts/scsi_satl @@ -0,0 +1,134 @@ +#!/bin/bash +# scsi_satl +# +# Script to test compliance of SCSI commands on a SCSI to ATA +# Translation (SAT) Layer (SATL). This script was compiled using +# sat-r09.pdf found at www.t10.org . +# The scripts still seems to be valid for sat2r09.pdf . +# The vintage is SPC-3 and SPC-4 (see www.t10.org). +# +# Coverage: +# Command SATL notes +# ------------------------------------------------------- +# INQUIRY (standard) +# INQUIRY (VPD: 0) +# INQUIRY (VPD: 0x83) Device identification VPD page +# INQUIRY (VPD: 0x89) ATA Information VPD page +# REPORT LUNS SPC-3, SPC-4 (hardly mentioned in sat-r08c) +# TEST UNIT READY +# REQUEST SENSE +# SEND DIAGNOSTIC default self test +# MODE SENSE(10) draft unclear which mode pages, so ask for all +# ATA PASS THROUGH(16) send IDENTIFY DEVICE command. Assume non-packet +# device, if packet device add "-p" option +# +# This script uses utilities from sg3_utils package (version +# 1.22 or later) +# +# Douglas Gilbert 20090930 + + +log=0 +quiet=0 +verbose="" + +file_err=0 +inv_opcode=0 +illeg_req=0 +not_ready=0 +medium=0 +other_err=0 +recovered=0 +sanity=0 +syntax=0 +timeout=0 +unit_attention=0 +aborted_command=0 + +## total_err=0 + +usage() +{ + echo "Usage: scsi_satl [-h] [-L] [-q] [-v] <device>" + echo " where: -h, --help print usage message" + echo " -L, --log append stderr to 'scsi_satl.err'" + echo " -q, --quiet suppress some output" + echo " -v, --verbose more verbose output" + echo "" + echo "Check <device> for SCSI to ATA Translation Layer (SATL) support" +} + +opt="$1" +while test ! -z "$opt" -a -z "${opt##-*}"; do + opt=${opt#-} + case "$opt" in + h|-help) usage ; exit 1 ;; + L|-log) let log=$log+1 ;; + q|-quiet) let quiet=$quiet+1 ;; + v|-verbose) verbose="-v" ;; + *) echo "Unknown option: -$opt " ; exit 1 ;; + esac + shift + opt="$1" +done + +if [ $# -lt 1 ] + then + usage + exit 1 +fi + +for command in "sg_inq" "sg_vpd" "sg_vpd -p di" "sg_vpd -p ai" "sg_luns" \ + "sg_turs" "sg_requests -s" "sg_senddiag -t" "sg_modes -a" \ + "sg_sat_identify" +do + if [ $quiet -eq 0 ] + then echo "$command" "$1" + fi + + if [ $log -eq 0 ] + then + if [ $verbose ] + then + $command $verbose "$1" > /dev/null + else + $command "$1" > /dev/null 2>> /dev/null + fi + else + $command $verbose "$1" > /dev/null 2>> scsi_satl.err + fi + res=$? + case "$res" in + 0) ;; + 1) echo " syntax error" ; let syntax=$syntax+1 ;; + 2) echo " not ready" ; let not_ready=$not_ready+1 ;; + 3) echo " medium error" ; let medium=$medium+1 ;; + 5) echo " illegal request, general" ; let illeg_req=$illeg_req+1 ;; + 6) echo " unit attention" ; let unit_attention=$unit_attention+1 ;; + 9) echo " illegal request, invalid opcode" ; let inv_opcode=$inv_opcode+1 ;; + 11) echo " aborted command" ; let aborted_command=$aborted_command+1 ;; + 15) echo " file error with $1 " ; let file_err=$file_err+1 ;; + 20) echo " no sense" ; let other_err=$other_err+1 ;; + 21) echo " recovered error" ; let recovered=$recovered+1 ;; + 33) echo " timeout" ; let timeout=$timeout+1 ;; + 97) echo " response fails sanity" ; let sanity=$sanity+1 ;; + 98) echo " other SCSI error" ; let other_err=$other_err+1 ;; + 99) echo " other error" ; let other_err=$other_err+1 ;; + *) echo " unknown exit status for sg_inq: $res" ; let other_err=$other_err+1 ;; + esac +done + +echo "" +let total_bad_err=$file_err+$inv_opcode+$illeg_req+$medium+$aborted_command +let total_bad_err+=$other_err+$recovered+$sanity+$syntax+$timeout + +let total_allow_err=$not_ready+$unit_attention + + echo "total number of bad errors: $total_bad_err " + +if [ $total_allow_err -gt 0 ] + then + echo "total number of allowable errors: $total_allow_err " +fi + +exit $total_bad_err |