1#!/bin/sh 2# 3# Print SCSI Enclosure Services (SES) info. The output is dependent on the name 4# of the script/symlink used to call it. 5# 6helpstr=" 7enc: Show disk enclosure w:x:y:z value. 8slot: Show disk slot number as reported by the enclosure. 9encdev: Show /dev/sg* device associated with the enclosure disk slot. 10fault_led: Show value of the disk enclosure slot fault LED. 11locate_led: Show value of the disk enclosure slot locate LED. 12ses: Show disk's enc, enc device, slot, and fault/locate LED values." 13 14script="${0##*/}" 15if [ "$1" = "-h" ] ; then 16 echo "$helpstr" | grep "$script:" | tr -s '\t' | cut -f 2- 17 exit 18fi 19 20if [ "$script" = "ses" ] ; then 21 scripts='enc encdev slot fault_led locate_led' 22else 23 scripts="$script" 24fi 25 26for i in $scripts ; do 27 # shellcheck disable=SC2154 28 if [ -z "$VDEV_ENC_SYSFS_PATH" ] ; then 29 echo "$i=" 30 continue 31 fi 32 33 val="" 34 case $i in 35 enc) 36 if echo "$VDEV_ENC_SYSFS_PATH" | grep -q '/sys/bus/pci/slots' ; then 37 val="$VDEV_ENC_SYSFS_PATH" 38 else 39 val="$(ls """$VDEV_ENC_SYSFS_PATH/../../""" 2>/dev/null)" 40 fi 41 ;; 42 slot) 43 if echo "$VDEV_ENC_SYSFS_PATH" | grep -q '/sys/bus/pci/slots' ; then 44 val="$(basename """$VDEV_ENC_SYSFS_PATH""")" 45 else 46 val="$(cat """$VDEV_ENC_SYSFS_PATH/slot""" 2>/dev/null)" 47 fi 48 ;; 49 encdev) 50 val=$(ls "$VDEV_ENC_SYSFS_PATH/../device/scsi_generic" 2>/dev/null) 51 ;; 52 fault_led) 53 # JBODs fault LED is called 'fault', NVMe fault LED is called 54 # 'attention'. 55 if [ -f "$VDEV_ENC_SYSFS_PATH/fault" ] ; then 56 val=$(cat "$VDEV_ENC_SYSFS_PATH/fault" 2>/dev/null) 57 elif [ -f "$VDEV_ENC_SYSFS_PATH/attention" ] ; then 58 val=$(cat "$VDEV_ENC_SYSFS_PATH/attention" 2>/dev/null) 59 fi 60 ;; 61 locate_led) 62 val=$(cat "$VDEV_ENC_SYSFS_PATH/locate" 2>/dev/null) 63 ;; 64 *) 65 val=invalid 66 ;; 67 esac 68 echo "$i=$val" 69done 70