1*44704f69SBart Van Assche#!/bin/bash 2*44704f69SBart Van Assche# 3*44704f69SBart Van Assche# cciss_id 4*44704f69SBart Van Assche# 5*44704f69SBart Van Assche# Generates device node names according to the cciss naming rules 6*44704f69SBart Van Assche# 7*44704f69SBart Van Assche# Copyright (C) 2011 SUSE Linux Products GmbH 8*44704f69SBart Van Assche# Author: 9*44704f69SBart Van Assche# Hannes Reinecke <[email protected]> 10*44704f69SBart Van Assche# 11*44704f69SBart Van Assche# 12*44704f69SBart Van Assche# This program is free software; you can redistribute it and/or modify it 13*44704f69SBart Van Assche# under the terms of the GNU General Public License as published by the 14*44704f69SBart Van Assche# Free Software Foundation version 2 of the License. 15*44704f69SBart Van Assche# 16*44704f69SBart Van Assche# This script generates a device node name which is compatible 17*44704f69SBart Van Assche# with the 'cciss' device naming rules. 18*44704f69SBart Van Assche# It is intended to provide backward-compatible names for the 19*44704f69SBart Van Assche# 'hpsa' driver. 20*44704f69SBart Van Assche# 21*44704f69SBart Van Assche 22*44704f69SBart Van Asschecciss_enumerate() 23*44704f69SBart Van Assche{ 24*44704f69SBart Van Assche local last_pci_dev=${1##0000:} 25*44704f69SBart Van Assche local cur_pci_dev 26*44704f69SBart Van Assche local cciss_num=0 27*44704f69SBart Van Assche 28*44704f69SBart Van Assche for cur_pci_dev in $(lspci -n | tac | sed -n 's/\(..:..\..\) .* 103c:\(3220\|3230\|3238\|323a\|323b\) .*/\1/p') ; do 29*44704f69SBart Van Assche if [ "$cur_pci_dev" == "$last_pci_dev" ] ; then 30*44704f69SBart Van Assche echo "$cciss_num" 31*44704f69SBart Van Assche return; 32*44704f69SBart Van Assche fi 33*44704f69SBart Van Assche cciss_num=$(($cciss_num + 1)) 34*44704f69SBart Van Assche done 35*44704f69SBart Van Assche echo "$cciss_num" 36*44704f69SBart Van Assche} 37*44704f69SBart Van Assche 38*44704f69SBart Van Asschehpsa_lun_offset() 39*44704f69SBart Van Assche{ 40*44704f69SBart Van Assche local scsi_host=$1 41*44704f69SBart Van Assche 42*44704f69SBart Van Assche scsi_id=$(lsscsi 2>/dev/null | sed -n "s/.\(${scsi_host}:[0-9]*:[0-9]*:[0-9]*\)..*disk .*/\1/p" | head -1) 43*44704f69SBart Van Assche echo ${scsi_id##*:} 44*44704f69SBart Van Assche} 45*44704f69SBart Van Assche 46*44704f69SBart Van AsscheDEVPATH=$1 47*44704f69SBart Van AsscheSCSIPATH=$(cd -P /sys$DEVPATH/device; echo $PWD) 48*44704f69SBart Van AsscheSCSIID=${SCSIPATH##*/} 49*44704f69SBart Van AsscheHOSTID=${SCSIID%%:*} 50*44704f69SBart Van AsscheLUNID=${SCSIID##*:} 51*44704f69SBart Van AsschePCIPATH=${SCSIPATH%%/host*} 52*44704f69SBart Van AsschePCIDEV=${PCIPATH##*/} 53*44704f69SBart Van AsscheHOSTPATH=${PCIPATH}/host${HOSTID}/scsi_host/host${HOSTID} 54*44704f69SBart Van Asscheread controller 2>/dev/null <${HOSTPATH}/ctlr_num || controller=$(cciss_enumerate $PCIDEV) 55*44704f69SBart Van Assche 56*44704f69SBart Van Assche# hpsa lies about the LUN ... 57*44704f69SBart Van Asschedisk_offset=$(hpsa_lun_offset $HOSTID) 58*44704f69SBart Van Asscheif [ "$disk_offset" ] ; then 59*44704f69SBart Van Assche disk=$(( $LUNID - $disk_offset )) 60*44704f69SBart Van Asscheelse 61*44704f69SBart Van Assche disk=$LUNID 62*44704f69SBart Van Asschefi 63*44704f69SBart Van Assche 64*44704f69SBart Van Asscheif [ "$controller" ] && [ "$disk" ] ; then 65*44704f69SBart Van Assche echo "ID_CCISS=c${controller}d${disk}" 66*44704f69SBart Van Asschefi 67