1a0261a43SJames C. McPherson#!/sbin/sh -p 27c478bd9Sstevel@tonic-gate# 37c478bd9Sstevel@tonic-gate# CDDL HEADER START 47c478bd9Sstevel@tonic-gate# 57c478bd9Sstevel@tonic-gate# The contents of this file are subject to the terms of the 66deb031bSsjelinek# Common Development and Distribution License (the "License"). 76deb031bSsjelinek# You may not use this file except in compliance with the License. 87c478bd9Sstevel@tonic-gate# 97c478bd9Sstevel@tonic-gate# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 107c478bd9Sstevel@tonic-gate# or http://www.opensolaris.org/os/licensing. 117c478bd9Sstevel@tonic-gate# See the License for the specific language governing permissions 127c478bd9Sstevel@tonic-gate# and limitations under the License. 137c478bd9Sstevel@tonic-gate# 147c478bd9Sstevel@tonic-gate# When distributing Covered Code, include this CDDL HEADER in each 157c478bd9Sstevel@tonic-gate# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 167c478bd9Sstevel@tonic-gate# If applicable, add the following below this CDDL HEADER, with the 177c478bd9Sstevel@tonic-gate# fields enclosed by brackets "[]" replaced with your own identifying 187c478bd9Sstevel@tonic-gate# information: Portions Copyright [yyyy] [name of copyright owner] 197c478bd9Sstevel@tonic-gate# 207c478bd9Sstevel@tonic-gate# CDDL HEADER END 217c478bd9Sstevel@tonic-gate# 227c478bd9Sstevel@tonic-gate# 23d7e6a9b1SYong-Feng Du# Copyright 2009 Sun Microsystems, Inc. All rights reserved. 247c478bd9Sstevel@tonic-gate# Use is subject to license terms. 257c478bd9Sstevel@tonic-gate# 26815dd917Sjmcp# 277c478bd9Sstevel@tonic-gatePATH=/usr/bin:/usr/sbin:$PATH; export PATH 287c478bd9Sstevel@tonic-gateSTMSBOOTUTIL=/lib/mpxio/stmsboot_util 297c478bd9Sstevel@tonic-gateSTMSMETHODSCRIPT=/lib/svc/method/mpxio-upgrade 3060fffc19Sjw149990KDRVCONF= 3160fffc19Sjw149990DRVCONF= 3260fffc19Sjw149990TMPDRVCONF= 3360fffc19Sjw149990TMPDRVCONF_MPXIO_ENTRY= 34cfc4930cSYong-Feng DuTMPDRVCONF_SATA_ENTRY= 3560fffc19Sjw149990DRVLIST= 3660fffc19Sjw149990GUID= 377c478bd9Sstevel@tonic-gateVFSTAB=/etc/vfstab 387c478bd9Sstevel@tonic-gateSAVEDIR=/etc/mpxio 39789c9c8fSJames C. McPhersonBOOTDEVICES=$SAVEDIR/boot-devices 407c478bd9Sstevel@tonic-gateRECOVERFILE=$SAVEDIR/recover_instructions 417c478bd9Sstevel@tonic-gateSVCCFG_RECOVERY=$SAVEDIR/svccfg_recover 424c06356bSdh142964SUPPORTED_DRIVERS="fp|mpt|mpt_sas|pmcs" 4360fffc19Sjw149990USAGE=`gettext "Usage: stmsboot [-D $SUPPORTED_DRIVERS] -e | -d | -u | -L | -l controller_number"` 44aca6e9ccSramatTEXTDOMAIN=SUNW_OST_OSCMD 45aca6e9ccSramatexport TEXTDOMAIN 46a0261a43SJames C. McPhersonSTMSINSTANCE=svc:system/device/mpxio-upgrade:default 4760fffc19Sjw149990STMSBOOT=/usr/sbin/stmsboot 4860fffc19Sjw149990BOOTADM=/sbin/bootadm 4960fffc19Sjw149990MOUNT=/usr/sbin/mount 50a0261a43SJames C. McPhersonEEPROM=/usr/sbin/eeprom 5160fffc19Sjw149990EGREP=/usr/bin/egrep 5260fffc19Sjw149990GREP=/usr/bin/grep 5360fffc19Sjw149990AWK=/usr/bin/awk 54a0261a43SJames C. McPhersonCP=/usr/bin/cp 55789c9c8fSJames C. McPhersonDF=/usr/bin/df 56a0261a43SJames C. McPhersonLS=/usr/bin/ls 57a0261a43SJames C. McPhersonMV=/usr/bin/mv 58a0261a43SJames C. McPhersonRM=/usr/bin/rm 5960fffc19Sjw149990SORT=/usr/bin/sort 6060fffc19Sjw149990UNIQ=/usr/bin/uniq 6160fffc19Sjw149990EXPR=/usr/bin/expr 62a0261a43SJames C. McPhersonMKDIR=/usr/bin/mkdir 63a0261a43SJames C. McPhersonREBOOT=/usr/sbin/reboot 64815dd917SjmcpSED=/usr/bin/sed 65815dd917SjmcpSVCPROP=/usr/bin/svcprop 66815dd917SjmcpSVCCFG=/usr/sbin/svccfg 67815dd917SjmcpSVCS=/usr/bin/svcs 68815dd917SjmcpSVCADM=/usr/sbin/svcadm 697c478bd9Sstevel@tonic-gate 70a0261a43SJames C. McPhersonNOW=`/usr/bin/date +%G%m%d_%H%M` 715a4c37c9Sqh201292MACH=`/usr/bin/uname -p` 72a0261a43SJames C. McPhersonBOOTENV_FILE=bootenv.rc 7360fffc19Sjw149990reboot_needed=0 74a0261a43SJames C. McPhersonnew_bootpath="" 75a0261a43SJames C. McPhersonCLIENT_TYPE_PHCI="" 76a0261a43SJames C. McPhersonCLIENT_TYPE_VHCI="/scsi_vhci" 77fa30e7bdSjianfei wang - Sun Microsystems - Beijing Chinanew_rootdev="" 78fa30e7bdSjianfei wang - Sun Microsystems - Beijing Chinasvm_md_device="" 7960fffc19Sjw149990 807c478bd9Sstevel@tonic-gate# 8160fffc19Sjw149990# Copy all entries (including comments) from source driver.conf 8260fffc19Sjw149990# to destination driver.conf except those entries which contain 8360fffc19Sjw149990# the mpxio-disable property. 847c478bd9Sstevel@tonic-gate# Take into consideration entries that spawn more than one line. 857c478bd9Sstevel@tonic-gate# 867c478bd9Sstevel@tonic-gate# $1 source driver.conf file 877c478bd9Sstevel@tonic-gate# $2 destination driver.conf file 887c478bd9Sstevel@tonic-gate# 897c478bd9Sstevel@tonic-gate# Returns 0 on success, non zero on failure. 907c478bd9Sstevel@tonic-gate# 917c478bd9Sstevel@tonic-gatedelete_mpxio_disable_entries() 927c478bd9Sstevel@tonic-gate{ 93a0261a43SJames C. McPherson # be careful here, we've got embedded \t characters 94a0261a43SJames C. McPherson # in sed's pattern space. 95a0261a43SJames C. McPherson $SED ' 967c478bd9Sstevel@tonic-gate /^[ ]*#/{ p 977c478bd9Sstevel@tonic-gate d 987c478bd9Sstevel@tonic-gate } 997c478bd9Sstevel@tonic-gate s/[ ]*$// 1007c478bd9Sstevel@tonic-gate /^$/{ p 1017c478bd9Sstevel@tonic-gate d 1027c478bd9Sstevel@tonic-gate } 1035a4c37c9Sqh201292 /mpxio-disable[ ]*=.*;$/{ w '$3' 1045a4c37c9Sqh201292 d 1055a4c37c9Sqh201292 } 106cfc4930cSYong-Feng Du /disable-sata-mpxio[ ]*=.*;$/{ w '$4' 107cfc4930cSYong-Feng Du d 108cfc4930cSYong-Feng Du } 1097c478bd9Sstevel@tonic-gate /;$/{ p 1107c478bd9Sstevel@tonic-gate d 1117c478bd9Sstevel@tonic-gate } 1127c478bd9Sstevel@tonic-gate :rdnext 1137c478bd9Sstevel@tonic-gate N 1147c478bd9Sstevel@tonic-gate s/[ ]*$// 1157c478bd9Sstevel@tonic-gate /[^;]$/b rdnext 1165a4c37c9Sqh201292 /mpxio-disable[ ]*=/{ s/\n/ /g 1175a4c37c9Sqh201292 w '$3' 1185a4c37c9Sqh201292 d 1195a4c37c9Sqh201292 } 1205a4c37c9Sqh201292 ' $1 > $2 1217c478bd9Sstevel@tonic-gate 1227c478bd9Sstevel@tonic-gate return $? 1237c478bd9Sstevel@tonic-gate} 1247c478bd9Sstevel@tonic-gate 1257c478bd9Sstevel@tonic-gate# 1267c478bd9Sstevel@tonic-gate# backup the last saved copy of the specified files. 1277c478bd9Sstevel@tonic-gate# $* files to backup 1287c478bd9Sstevel@tonic-gate# 1297c478bd9Sstevel@tonic-gatebackup_lastsaved() 1307c478bd9Sstevel@tonic-gate{ 1317c478bd9Sstevel@tonic-gate for file in $* 1327c478bd9Sstevel@tonic-gate do 133a0261a43SJames C. McPherson newfile=`basename $file` 134a0261a43SJames C. McPherson $CP $file $SAVEDIR/$newfile.$cmd.$NOW 1357c478bd9Sstevel@tonic-gate done 1367c478bd9Sstevel@tonic-gate} 1377c478bd9Sstevel@tonic-gate 1387c478bd9Sstevel@tonic-gate# 1397c478bd9Sstevel@tonic-gate# build recover instructions 1407c478bd9Sstevel@tonic-gate# 1417c478bd9Sstevel@tonic-gate# $1 1 to include boot script in the instructions 1427c478bd9Sstevel@tonic-gate# 0 otherwise 1437c478bd9Sstevel@tonic-gate# 1447c478bd9Sstevel@tonic-gatebuild_recover() 1457c478bd9Sstevel@tonic-gate{ 1467c478bd9Sstevel@tonic-gate gettext "Instructions to recover your previous STMS configuration (if in case the system does not boot):\n\n" > $RECOVERFILE 1477c478bd9Sstevel@tonic-gate echo "\tboot net \c" >> $RECOVERFILE 1487c478bd9Sstevel@tonic-gate gettext "(or from a cd/dvd/another disk)\n" >> $RECOVERFILE 1497c478bd9Sstevel@tonic-gate echo "\tfsck <your-root-device>" >> $RECOVERFILE 1507c478bd9Sstevel@tonic-gate echo "\tmount <your-root-device> /mnt" >> $RECOVERFILE 1517c478bd9Sstevel@tonic-gate 152fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$cmd" = "update" ]; then 1537c478bd9Sstevel@tonic-gate gettext "\tUndo the modifications you made to STMS configuration.\n\tFor example undo any changes you made to " >> $RECOVERFILE 15460fffc19Sjw149990 echo "/mnt$KDRVCONF." >> $RECOVERFILE 1557c478bd9Sstevel@tonic-gate else 156a0261a43SJames C. McPherson echo "\tcp /mnt${SAVEDIR}/$DRVCONF.$cmd.$NOW /mnt$KDRVCONF" >> $RECOVERFILE 1577c478bd9Sstevel@tonic-gate fi 1587c478bd9Sstevel@tonic-gate 159815dd917Sjmcp if [ $1 -eq 1 ]; then 160a0261a43SJames C. McPherson echo "\tcp /mnt${SAVEDIR}/vfstab.$cmd.$NOW /mnt$VFSTAB" >> $RECOVERFILE 1617c478bd9Sstevel@tonic-gate 1627c478bd9Sstevel@tonic-gate echo "repository /mnt/etc/svc/repository.db" > $SVCCFG_RECOVERY 1637c478bd9Sstevel@tonic-gate echo "select $STMSINSTANCE" >> $SVCCFG_RECOVERY 1647c478bd9Sstevel@tonic-gate echo "setprop general/enabled=false" >> $SVCCFG_RECOVERY 1657c478bd9Sstevel@tonic-gate echo "exit" >> $SVCCFG_RECOVERY 1667c478bd9Sstevel@tonic-gate 167815dd917Sjmcp echo "\t$SVCCFG -f /mnt$SVCCFG_RECOVERY" >> $RECOVERFILE 1685a4c37c9Sqh201292 169fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ -n "$new_bootpath" -a "$MACH" = "i386" ]; then 170a0261a43SJames C. McPherson echo "\tcp /mnt${SAVEDIR}/bootenv.rc.$cmd.$NOW /mnt/boot/solaris/$BOOTENV_FILE" >> $RECOVERFILE 1715a4c37c9Sqh201292 fi 1727c478bd9Sstevel@tonic-gate fi 1737c478bd9Sstevel@tonic-gate 17460fffc19Sjw149990 rootdisk=`$MOUNT | $GREP "/ on " | cut -f 3 -d " "` 1757c478bd9Sstevel@tonic-gate echo "\tumount /mnt\n\treboot\n\n${rootdisk} \c" >> $RECOVERFILE 1767c478bd9Sstevel@tonic-gate gettext "was your root device,\nbut it could be named differently after you boot net.\n" >> $RECOVERFILE 1777c478bd9Sstevel@tonic-gate} 1787c478bd9Sstevel@tonic-gate 179a0261a43SJames C. McPherson 1807c478bd9Sstevel@tonic-gate# 1817c478bd9Sstevel@tonic-gate# Arrange for /etc/vfstab and dump configuration to be updated 1827c478bd9Sstevel@tonic-gate# during the next reboot. If the cmd is "enable" or "disable", copy 18360fffc19Sjw149990# $TMPDRVCONF to $KDRVCONF. 1847c478bd9Sstevel@tonic-gate# 1857c478bd9Sstevel@tonic-gate# Returns 0 on success, 1 on failure. 1867c478bd9Sstevel@tonic-gate# 1877c478bd9Sstevel@tonic-gateupdate_sysfiles() 1887c478bd9Sstevel@tonic-gate{ 18960fffc19Sjw149990 190a0261a43SJames C. McPherson gettext "WARNING: This operation will require a reboot.\n" 191a0261a43SJames C. McPherson gettext "Do you want to continue ? [y/n] (default: y) " 1927c478bd9Sstevel@tonic-gate read response 1937c478bd9Sstevel@tonic-gate 194fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ -n "$response" -a "$response" != "y" -a \ 195fa30e7bdSjianfei wang - Sun Microsystems - Beijing China "$response" != "Y" ]; then 19660fffc19Sjw149990 for d in $DRVLIST; do 19760fffc19Sjw149990 TMPDRVCONF=/var/run/tmp.$d.conf.$$ 198a0261a43SJames C. McPherson $RM -f $TMPDRVCONF > /dev/null 2>&1 19960fffc19Sjw149990 done; 20060fffc19Sjw149990 return 0; 2017c478bd9Sstevel@tonic-gate fi 2027c478bd9Sstevel@tonic-gate 203815dd917Sjmcp # set need_bootscript to the number of drivers that 204815dd917Sjmcp # we support. 205815dd917Sjmcp need_bootscript=`echo $SUPPORTED_DRIVERS|$AWK -F"|" '{print NF}'` 20660fffc19Sjw149990 207fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$cmd" = "enable" -o "$cmd" = "disable" ]; then 20860fffc19Sjw149990 20960fffc19Sjw149990 for d in $DRVLIST; do 21060fffc19Sjw149990 DRVCONF=$d.conf 21160fffc19Sjw149990 KDRVCONF=/kernel/drv/$d.conf 21260fffc19Sjw149990 TMPDRVCONF=/var/run/tmp.$d.conf.$$ 21360fffc19Sjw149990 214a0261a43SJames C. McPherson $CP $KDRVCONF $SAVEDIR/`basename $KDRVCONF`.$cmd.$NOW 215815dd917Sjmcp if [ -f $TMPDRVCONF ]; then 216a0261a43SJames C. McPherson $CP $TMPDRVCONF $KDRVCONF 217a0261a43SJames C. McPherson $RM -f $TMPDRVCONF 218815dd917Sjmcp else 219815dd917Sjmcp # if $TMPDRVCONF doesn't exist, then we 220815dd917Sjmcp # haven't made any changes to it 221815dd917Sjmcp continue; 222815dd917Sjmcp fi 2237c478bd9Sstevel@tonic-gate 2247c478bd9Sstevel@tonic-gate # 2257c478bd9Sstevel@tonic-gate # there is no need to update the system files in the following 2267c478bd9Sstevel@tonic-gate # cases: 2277c478bd9Sstevel@tonic-gate # - we are enabling mpxio and the system has no configured 2287c478bd9Sstevel@tonic-gate # disks accessible by phci paths. 2297c478bd9Sstevel@tonic-gate # - we are disabling mpxio and the system has no configured 2307c478bd9Sstevel@tonic-gate # disks accessible by vhci paths. 2317c478bd9Sstevel@tonic-gate # 23260fffc19Sjw149990 233815dd917Sjmcp # Function to setup the CLIENT_TYPE_PHCI string based on 234815dd917Sjmcp # the list of drivers that we're operating on. The variable 235815dd917Sjmcp # depends upon the pathname of the parent node in the 236815dd917Sjmcp # device tree, which can be different on x86/x64 and sparc. 237815dd917Sjmcp 238a0261a43SJames C. McPherson CLIENT_TYPE_PHCI=`$STMSBOOTUTIL -D $d -N`; 239815dd917Sjmcp 240fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ -z "$CLIENT_TYPE_PHCI" ]; then 24160fffc19Sjw149990 continue; 24260fffc19Sjw149990 fi 24360fffc19Sjw149990 244fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$cmd" = "enable" ]; then 245a0261a43SJames C. McPherson $LS -l /dev/dsk/*s2 2> /dev/null | \ 24660fffc19Sjw149990 $EGREP -s "$CLIENT_TYPE_PHCI" 2477c478bd9Sstevel@tonic-gate else 248a0261a43SJames C. McPherson $LS -l /dev/dsk/*s2 2> /dev/null | \ 24960fffc19Sjw149990 $EGREP -s "$CLIENT_TYPE_VHCI" 2507c478bd9Sstevel@tonic-gate fi 2517c478bd9Sstevel@tonic-gate 2527c478bd9Sstevel@tonic-gate if [ $? -ne 0 ]; then 253815dd917Sjmcp need_bootscript=`$EXPR $need_bootscript - 1` 25460fffc19Sjw149990 fi 25560fffc19Sjw149990 done 25660fffc19Sjw149990 fi 25760fffc19Sjw149990 258815dd917Sjmcp if [ $need_bootscript -gt 0 ]; then 259815dd917Sjmcp need_bootscript=1 260fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ -n "$new_bootpath" -a "$MACH" = "i386" ]; then 2615a4c37c9Sqh201292 #only update bootpath for x86. 262a0261a43SJames C. McPherson $CP /boot/solaris/$BOOTENV_FILE $SAVEDIR/$BOOTENV_FILE.$cmd.$NOW 263a0261a43SJames C. McPherson $EEPROM bootpath="$new_bootpath" 2645a4c37c9Sqh201292 fi 265fa30e7bdSjianfei wang - Sun Microsystems - Beijing China 266fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$svm_md_device" != "NOT_MAPPED" ]; then 267a0261a43SJames C. McPherson # Enable the mpxio-upgrade service for the reboot 268815dd917Sjmcp $SVCADM disable -t $STMSINSTANCE 269a0261a43SJames C. McPherson $SVCCFG -s $STMSINSTANCE "setprop general/enabled=true" 270fa30e7bdSjianfei wang - Sun Microsystems - Beijing China fi 271815dd917Sjmcp else 272815dd917Sjmcp need_bootscript=0 2737c478bd9Sstevel@tonic-gate fi 2747c478bd9Sstevel@tonic-gate 2757c478bd9Sstevel@tonic-gate build_recover $need_bootscript 2767c478bd9Sstevel@tonic-gate 277fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$MACH" = "i386" ]; then 27860fffc19Sjw149990 $BOOTADM update-archive 27960fffc19Sjw149990 fi 28060fffc19Sjw149990 2817c478bd9Sstevel@tonic-gate gettext "The changes will come into effect after rebooting the system.\nReboot the system now ? [y/n] (default: y) " 2827c478bd9Sstevel@tonic-gate read response 2837c478bd9Sstevel@tonic-gate 284fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ -z "$response" -o "$response" = "y" -o \ 285fa30e7bdSjianfei wang - Sun Microsystems - Beijing China "$response" = "Y" ]; then 286a0261a43SJames C. McPherson $REBOOT 2877c478bd9Sstevel@tonic-gate fi 2887c478bd9Sstevel@tonic-gate 2897c478bd9Sstevel@tonic-gate return 0 2907c478bd9Sstevel@tonic-gate} 2917c478bd9Sstevel@tonic-gate 292a0261a43SJames C. McPherson 2937c478bd9Sstevel@tonic-gate# 2947c478bd9Sstevel@tonic-gate# Enable or disable mpxio as specified by the cmd. 2957c478bd9Sstevel@tonic-gate# Returns 0 on success, 1 on failure. 2967c478bd9Sstevel@tonic-gate# 29760fffc19Sjw149990# Args: $cmd = {enable | disable} 2984c06356bSdh142964# $d = {fp | mpt | mpt_sas | pmcs} 29960fffc19Sjw149990# 30060fffc19Sjw149990# the global variable $DRVLIST is used 30160fffc19Sjw149990# 3027c478bd9Sstevel@tonic-gateconfigure_mpxio() 3037c478bd9Sstevel@tonic-gate{ 304a0261a43SJames C. McPherson # be careful here, we've got embedded \t characters 305a0261a43SJames C. McPherson # in sed's pattern space. 3065a4c37c9Sqh201292 mpxiodisableno='mpxio-disable[ ]*=[ ]*"no"[ ]*;' 3075a4c37c9Sqh201292 mpxiodisableyes='mpxio-disable[ ]*=[ ]*"yes"[ ]*;' 308cfc4930cSYong-Feng Du satadisableno='disable-sata-mpxio[ ]*=[ ]*"no"[ ]*;' 309cfc4930cSYong-Feng Du satadisableyes='disable-sata-mpxio[ ]*=[ ]*"yes"[ ]*;' 3105a4c37c9Sqh201292 311fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$cmd" = "enable" ]; then 3125a4c37c9Sqh201292 mpxiodisable_cur_entry=$mpxiodisableyes 313cfc4930cSYong-Feng Du satadisable_cur_entry=$satadisableyes 3147c478bd9Sstevel@tonic-gate propval=no 31560fffc19Sjw149990 msg=`gettext "STMS already enabled"` 3167c478bd9Sstevel@tonic-gate else 3175a4c37c9Sqh201292 mpxiodisable_cur_entry=$mpxiodisableno 318cfc4930cSYong-Feng Du satadisable_cur_entry=$satadisableno 3197c478bd9Sstevel@tonic-gate propval=yes 32060fffc19Sjw149990 msg=`gettext "STMS already disabled"` 3217c478bd9Sstevel@tonic-gate fi 3227c478bd9Sstevel@tonic-gate 32360fffc19Sjw149990 DRVCONF=$d.conf 32460fffc19Sjw149990 KDRVCONF=/kernel/drv/$d.conf 32560fffc19Sjw149990 TMPDRVCONF=/var/run/tmp.$d.conf.$$ 32660fffc19Sjw149990 TMPDRVCONF_MPXIO_ENTRY=/var/run/tmp.$d.conf.mpxioentry.$$; 327cfc4930cSYong-Feng Du TMPDRVCONF_SATA_ENTRY=/var/run/tmp.$d.conf.sataentry.$$; 32860fffc19Sjw149990 329cfc4930cSYong-Feng Du if delete_mpxio_disable_entries $KDRVCONF $TMPDRVCONF $TMPDRVCONF_MPXIO_ENTRY $TMPDRVCONF_SATA_ENTRY; then 33060fffc19Sjw149990 33160fffc19Sjw149990 if [ -s $TMPDRVCONF_MPXIO_ENTRY ]; then 33260fffc19Sjw149990 # $DRVCONF does have mpxiodisable entries 33360fffc19Sjw149990 $EGREP -s "$mpxiodisable_cur_entry" $TMPDRVCONF_MPXIO_ENTRY 334cfc4930cSYong-Feng Du if [ $? -eq 0 ]; then 335cfc4930cSYong-Feng Du reboot_needed=`$EXPR $reboot_needed + 1` 336cfc4930cSYong-Feng Du else 3375a4c37c9Sqh201292 # if all mpxiodisable entries are no/yes for 3385a4c37c9Sqh201292 # enable/disable mpxio, notify the user 339cfc4930cSYong-Feng Du $EGREP -s "$satadisable_cur_entry" $TMPDRVCONF_SATA_ENTRY 340fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ $? -eq 0 -a "$d" = "mpt" ]; then 34160fffc19Sjw149990 reboot_needed=`$EXPR $reboot_needed + 1` 342cfc4930cSYong-Feng Du else 343cfc4930cSYong-Feng Du $RM -f $TMPDRVCONF $TMPDRVCONF_MPXIO_ENTRY $TMPDRVCONF_SATA_ENTRY > /dev/null 2>&1 344*ccb7005eSYong-Feng Du return 0; 345cfc4930cSYong-Feng Du fi 3467c478bd9Sstevel@tonic-gate fi 34760fffc19Sjw149990 34860fffc19Sjw149990 # If mpxiodisable entries do not exist, always continue update 3495a4c37c9Sqh201292 fi 3507c478bd9Sstevel@tonic-gate else 351cfc4930cSYong-Feng Du $RM -f $TMPDRVCONF $TMPDRVCONF_MPXIO_ENTRY $TMPDRVCONF_SATA_ENTRY > /dev/null 2>&1 3527c478bd9Sstevel@tonic-gate gettext "failed to update " 1>&2 35360fffc19Sjw149990 echo "$KDRVCONF." 1>&2 3547c478bd9Sstevel@tonic-gate gettext "No changes were made to your STMS configuration.\n" 1>&2 3557c478bd9Sstevel@tonic-gate return 1 3567c478bd9Sstevel@tonic-gate fi 3575a4c37c9Sqh201292 35835c62094Sjianfei wang - Sun Microsystems - Beijing China rm $TMPDRVCONF_MPXIO_ENTRY $TMPDRVCONF_SATA_ENTRY > /dev/null 2>&1 35960fffc19Sjw149990 echo "mpxio-disable=\"${propval}\";" >> $TMPDRVCONF 360fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$d" = "mpt" ]; then 361cfc4930cSYong-Feng Du echo "disable-sata-mpxio=\"${propval}\";" >> $TMPDRVCONF 36235c62094Sjianfei wang - Sun Microsystems - Beijing China fi 3635a4c37c9Sqh201292 3647c478bd9Sstevel@tonic-gate} 3657c478bd9Sstevel@tonic-gate 3667c478bd9Sstevel@tonic-gatesetcmd() 3677c478bd9Sstevel@tonic-gate{ 368fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$cmd" = "none" ]; then 3697c478bd9Sstevel@tonic-gate cmd=$1 3707c478bd9Sstevel@tonic-gate else 3717c478bd9Sstevel@tonic-gate echo "$USAGE" 1>&2 3727c478bd9Sstevel@tonic-gate exit 2 3737c478bd9Sstevel@tonic-gate fi 3747c478bd9Sstevel@tonic-gate} 3757c478bd9Sstevel@tonic-gate 37660fffc19Sjw149990# 3775a4c37c9Sqh201292# Need to update bootpath on x86 if boot system from FC disk 3785a4c37c9Sqh201292# Only update bootpath here when mpxio is enabled 379a0261a43SJames C. McPherson# If mpxio is currently disabled, then we'll update bootpath in the 380a0261a43SJames C. McPherson# mpxio-upgrade service method on reboot. 38160fffc19Sjw149990# 38260fffc19Sjw149990 3835a4c37c9Sqh201292get_newbootpath_for_stmsdev() { 384fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$cmd" = "enable" ]; then 3855a4c37c9Sqh201292 return 0 3865a4c37c9Sqh201292 fi 3875a4c37c9Sqh201292 388a0261a43SJames C. McPherson cur_bootpath=`$STMSBOOTUTIL -b` 389a0261a43SJames C. McPherson if [ $? != 0 ]; then 3905a4c37c9Sqh201292 return 1 3915a4c37c9Sqh201292 fi 3925a4c37c9Sqh201292 393a0261a43SJames C. McPherson # Since on x64 platforms the eeprom command doesn't update the 394a0261a43SJames C. McPherson # kernel, the file /boot/solaris/bootenv.rc and the kernel's 395a0261a43SJames C. McPherson # bootpath variable have a good chance of differing. We do some 396a0261a43SJames C. McPherson # extra handwaving to get the correct bootpath variable setting. 397a0261a43SJames C. McPherson 398a0261a43SJames C. McPherson ONDISKVER=`$AWK '/bootpath/ {print $3}' /boot/solaris/bootenv.rc|\ 399a0261a43SJames C. McPherson $SED -e"s,',,g"` 400fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$ONDISKVER" != "$cur_bootpath" ]; then 401a0261a43SJames C. McPherson cur_bootpath="$ONDISKVER" 402a0261a43SJames C. McPherson fi 403a0261a43SJames C. McPherson 404a0261a43SJames C. McPherson NEWBOOTPATH="" 405a0261a43SJames C. McPherson for path in $cur_bootpath; do 406a0261a43SJames C. McPherson mapped=`$STMSBOOTUTIL -p $path` 407a0261a43SJames C. McPherson if [ "$mapped" != "NOT_MAPPED" ]; then 408a0261a43SJames C. McPherson if [ "$mapped" != "$path" ]; then 409a0261a43SJames C. McPherson NEWBOOTPATH=`echo "$path " | \ 410a0261a43SJames C. McPherson $SED -e"s|$path|$mapped|"`" $NEWBOOTPATH" 411a0261a43SJames C. McPherson else 412a0261a43SJames C. McPherson NEWBOOTPATH="$NEWBOOTPATH $path" 413a0261a43SJames C. McPherson fi 414a0261a43SJames C. McPherson fi 415a0261a43SJames C. McPherson done 416a0261a43SJames C. McPherson # now strip off leading and trailing space chars 417a0261a43SJames C. McPherson new_bootpath=`echo $NEWBOOTPATH` 4185a4c37c9Sqh201292 return 0 41960fffc19Sjw149990} 42060fffc19Sjw149990 42160fffc19Sjw149990# 42260fffc19Sjw149990# Emit a warning message to the user that by default we 42360fffc19Sjw149990# operate on all multipath-capable controllers that are 42460fffc19Sjw149990# attached to the system, and that if they want to operate 4254c06356bSdh142964# on only a specific controller type (fp|mpt|mpt_sas|pmcs|....) then 42660fffc19Sjw149990# they need to re-invoke stmsboot with "-D $driver" in 42760fffc19Sjw149990# their argument list 42860fffc19Sjw149990# 42960fffc19Sjw149990 43060fffc19Sjw149990emit_driver_warning_msg() { 43160fffc19Sjw149990 43260fffc19Sjw149990 # for each driver that we support, grab the list 43360fffc19Sjw149990 # of controllers attached to the system. 43460fffc19Sjw149990 435815dd917Sjmcp echo "" 43653ed03b5Sjmcp gettext "WARNING: stmsboot operates on each supported multipath-capable controller\n" 43753ed03b5Sjmcp gettext " detected in a host. In your system, these controllers are\n\n" 43860fffc19Sjw149990 439815dd917Sjmcp for WARNDRV in `echo $SUPPORTED_DRIVERS| $SED -e"s,|, ,g"`; do 440a0261a43SJames C. McPherson $STMSBOOTUTIL -D $WARNDRV -n 44160fffc19Sjw149990 done; 44260fffc19Sjw149990 44360fffc19Sjw149990 echo "" 44453ed03b5Sjmcp gettext "If you do NOT wish to operate on these controllers, please quit stmsboot\n" 4454c06356bSdh142964 gettext "and re-invoke with -D { fp | mpt | mpt_sas | pmcs} to specify which controllers you wish\n" 44653ed03b5Sjmcp gettext "to modify your multipathing configuration for.\n" 44760fffc19Sjw149990 448815dd917Sjmcp echo "" 44953ed03b5Sjmcp gettext "Do you wish to continue? [y/n] (default: y) " 45060fffc19Sjw149990 read response 45160fffc19Sjw149990 452fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ -n "$response" -a "$response" != "Y" -a \ 453fa30e7bdSjianfei wang - Sun Microsystems - Beijing China "$response" != "y" ]; then 45460fffc19Sjw149990 exit 45560fffc19Sjw149990 fi 45660fffc19Sjw149990} 45760fffc19Sjw149990 4587c478bd9Sstevel@tonic-gate 459a0261a43SJames C. McPherson# 460a0261a43SJames C. McPherson# 461a0261a43SJames C. McPherson# main starts here 462a0261a43SJames C. McPherson# 463a0261a43SJames C. McPherson 464a0261a43SJames C. McPhersoncmd=none 4657c478bd9Sstevel@tonic-gate# process options 46660fffc19Sjw149990while getopts D:geduLl: c 4677c478bd9Sstevel@tonic-gatedo 4687c478bd9Sstevel@tonic-gate case $c in 4697c478bd9Sstevel@tonic-gate e) setcmd enable;; 4707c478bd9Sstevel@tonic-gate d) setcmd disable;; 4717c478bd9Sstevel@tonic-gate u) setcmd update;; 4727c478bd9Sstevel@tonic-gate L) setcmd listall;; 4737c478bd9Sstevel@tonic-gate l) setcmd list 4747c478bd9Sstevel@tonic-gate controller=$OPTARG;; 47560fffc19Sjw149990 D) DRV=$OPTARG;; 47660fffc19Sjw149990 g) GUID="-g";; 4777c478bd9Sstevel@tonic-gate \?) echo "$USAGE" 1>&2 4787c478bd9Sstevel@tonic-gate exit 2;; 4797c478bd9Sstevel@tonic-gate esac 4807c478bd9Sstevel@tonic-gatedone 4817c478bd9Sstevel@tonic-gate 482fa30e7bdSjianfei wang - Sun Microsystems - Beijing Chinaif [ "$cmd" = "none" ]; then 4837c478bd9Sstevel@tonic-gate echo "$USAGE" 1>&2 4847c478bd9Sstevel@tonic-gate exit 2 4857c478bd9Sstevel@tonic-gatefi 4867c478bd9Sstevel@tonic-gate 487fa30e7bdSjianfei wang - Sun Microsystems - Beijing Chinaif [ -z "$DRV" ]; then 4884c06356bSdh142964 DRVLIST="fp mpt mpt_sas pmcs" 48960fffc19Sjw149990else 49060fffc19Sjw149990 DRVLIST=$DRV 49160fffc19Sjw149990fi 49260fffc19Sjw149990 49334c94816SjmcpUSERID=`id | $EGREP "uid=0"` 49434c94816Sjmcpif [ -z "$USERID" ]; then 4957c478bd9Sstevel@tonic-gate gettext "You must be super-user to run this script.\n" 1>&2 4967c478bd9Sstevel@tonic-gate exit 1 4977c478bd9Sstevel@tonic-gatefi 4987c478bd9Sstevel@tonic-gate 4997c478bd9Sstevel@tonic-gate# just a sanity check 5007c478bd9Sstevel@tonic-gateif [ ! -f $STMSBOOTUTIL -o ! -f $STMSMETHODSCRIPT ]; then 5017c478bd9Sstevel@tonic-gate fmt=`gettext "Can't find %s and/or %s"` 5027c478bd9Sstevel@tonic-gate printf "$fmt\n" "$STMSBOOTUTIL" "$STMSMETHODSCRIPT" 1>&2 5037c478bd9Sstevel@tonic-gate exit 1 5047c478bd9Sstevel@tonic-gatefi 5057c478bd9Sstevel@tonic-gate 50660fffc19Sjw149990# If the old sun4u-specific SMF method is found, remove it 507815dd917Sjmcp$SVCCFG -s "platform/sun4u/mpxio-upgrade:default" < /dev/null > /dev/null 2>&1 508815dd917Sjmcpif [ $? -eq 0 ]; then 509815dd917Sjmcp $SVCCFG delete "platform/sun4u/mpxio-upgrade:default" > /dev/null 2>&1 51060fffc19Sjw149990fi 51160fffc19Sjw149990 51260fffc19Sjw149990# now import the new service, if necessary 513815dd917Sjmcp$SVCPROP -q $STMSINSTANCE < /dev/null > /dev/null 2>&1 51460fffc19Sjw149990if [ $? -ne 0 ]; then 51560fffc19Sjw149990 if [ -f /var/svc/manifest/system/device/mpxio-upgrade.xml ]; then 516815dd917Sjmcp $SVCCFG import /var/svc/manifest/system/device/mpxio-upgrade.xml 51760fffc19Sjw149990 if [ $? -ne 0 ]; then 518fa30e7bdSjianfei wang - Sun Microsystems - Beijing China 51953ed03b5Sjmcp fmt=`gettext "Unable to import the %s service"` 5207c478bd9Sstevel@tonic-gate printf "$fmt\n" "$STMSINSTANCE" 1>&2 5217c478bd9Sstevel@tonic-gate exit 1 52260fffc19Sjw149990 else 52360fffc19Sjw149990 fmt=`gettext "Service %s imported successfully, continuing"` 52460fffc19Sjw149990 printf "$fmt\n" "$STMSINSTANCE" 1>&2 52560fffc19Sjw149990 fi 52660fffc19Sjw149990 else 52760fffc19Sjw149990 fmt=`gettext "Service %s does not exist on this host"` 52860fffc19Sjw149990 printf "$fmt\n" "$STMSINSTANCE" 1>&2 52960fffc19Sjw149990 exit 1 53060fffc19Sjw149990 fi 5317c478bd9Sstevel@tonic-gatefi 5327c478bd9Sstevel@tonic-gate 533a0261a43SJames C. McPherson 534a0261a43SJames C. McPherson# make sure we can stash our data somewhere private 535a0261a43SJames C. McPhersonif [ ! -d $SAVEDIR ]; then 536a0261a43SJames C. McPherson $MKDIR -p $SAVEDIR 537a0261a43SJames C. McPhersonfi 538a0261a43SJames C. McPherson# prime the cache 539a0261a43SJames C. McPherson$STMSBOOTUTIL -i 540a0261a43SJames C. McPherson 541a0261a43SJames C. McPherson 542fa30e7bdSjianfei wang - Sun Microsystems - Beijing Chinaif [ "$cmd" = "enable" -o "$cmd" = "disable" -o "$cmd" = "update" ]; then 5437c478bd9Sstevel@tonic-gate # 5447c478bd9Sstevel@tonic-gate # The bootup script doesn't work on cache-only-clients as the script 5456deb031bSsjelinek # is executed before the plumbing for cachefs mounting of root is done. 5467c478bd9Sstevel@tonic-gate # 54760fffc19Sjw149990 if $MOUNT -v | $EGREP -s " on / type (nfs|cachefs) "; then 548a0261a43SJames C. McPherson gettext "This command option is not supported on systems with an nfs or cachefs mounted root filesystem.\n" 1>&2 5497c478bd9Sstevel@tonic-gate exit 1 5507c478bd9Sstevel@tonic-gate fi 5517c478bd9Sstevel@tonic-gate 552815dd917Sjmcp # if the user has left the system with the mpxio-upgrade service 553815dd917Sjmcp # in a temporarily disabled state (ie, service is armed for the next 554815dd917Sjmcp # reboot), then let them know. We need to ensure that the system is 555815dd917Sjmcp # is in a sane state before allowing any further invocations, so 556815dd917Sjmcp # try to get the system admin to do so 557815dd917Sjmcp 558a0261a43SJames C. McPherson ISARMED=`$SVCS -l $STMSINSTANCE|$GREP "enabled.*false.*temporary"` 559a0261a43SJames C. McPherson if [ ! $? ]; then 560815dd917Sjmcp echo "" 56153ed03b5Sjmcp gettext "You need to reboot the system in order to complete\n" 56253ed03b5Sjmcp gettext "the previous invocation of stmsboot.\n" 563815dd917Sjmcp echo "" 56453ed03b5Sjmcp gettext "Do you wish to reboot the system now? (y/n, default y) " 565815dd917Sjmcp read response 566815dd917Sjmcp 567fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ -z "$response" -o "x$response" = "Y" -o \ 568fa30e7bdSjianfei wang - Sun Microsystems - Beijing China "$response" = "y" ]; then 569a0261a43SJames C. McPherson $REBOOT 570815dd917Sjmcp else 57153ed03b5Sjmcp echo "" 57253ed03b5Sjmcp gettext "Please reboot this system before continuing\n" 57353ed03b5Sjmcp echo "" 574815dd917Sjmcp exit 1 575815dd917Sjmcp fi 576815dd917Sjmcp fi 577815dd917Sjmcp 5787c478bd9Sstevel@tonic-gate # 5797c478bd9Sstevel@tonic-gate # keep a copy of the last saved files, useful for manual 5807c478bd9Sstevel@tonic-gate # recovery in case of a problem. 5817c478bd9Sstevel@tonic-gate # 58260fffc19Sjw149990 for d in $DRVLIST; do 58360fffc19Sjw149990 DRVCONF=$d.conf 58460fffc19Sjw149990 KDRVCONF=/kernel/drv/$d.conf 58560fffc19Sjw149990 TMPDRVCONF=/var/run/tmp.$d.conf.$$ 58660fffc19Sjw149990 TMPDRVCONF_MPXIO_ENTRY=/var/run/tmp.$d.conf.mpxioentry.$$; 587fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$MACH" = "sparc" ]; then 58860fffc19Sjw149990 backup_lastsaved $KDRVCONF $VFSTAB 5897c478bd9Sstevel@tonic-gate else 590a0261a43SJames C. McPherson backup_lastsaved $KDRVCONF $VFSTAB /boot/solaris/$BOOTENV_FILE 5915a4c37c9Sqh201292 fi 59260fffc19Sjw149990 done 5937c478bd9Sstevel@tonic-gatefi 5947c478bd9Sstevel@tonic-gate 595fa30e7bdSjianfei wang - Sun Microsystems - Beijing Chinaif [ "$cmd" = "enable" -o "$cmd" = "disable" ]; then 59660fffc19Sjw149990 59760fffc19Sjw149990 msgneeded=`echo "$DRVLIST" |grep " "` 59860fffc19Sjw149990 if [ -n "$msgneeded" ]; then 59960fffc19Sjw149990 emit_driver_warning_msg 60060fffc19Sjw149990 fi 60160fffc19Sjw149990 for d in $DRVLIST; do 60260fffc19Sjw149990 configure_mpxio $cmd $d 60360fffc19Sjw149990 done 60460fffc19Sjw149990 60560fffc19Sjw149990 if [ $reboot_needed -ne 0 ]; then 60660fffc19Sjw149990 # Need to update bootpath on x86 if our boot device is 60760fffc19Sjw149990 # now accessed through mpxio. 60860fffc19Sjw149990 # Only update bootpath before reboot when mpxio is enabled 60960fffc19Sjw149990 # If mpxio is currently disabled, we will update bootpath 61060fffc19Sjw149990 # on reboot in the mpxio-upgrade service 61160fffc19Sjw149990 612fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$cmd" = "disable" ]; then 613fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$MACH" = "i386" ]; then 61460fffc19Sjw149990 get_newbootpath_for_stmsdev 61560fffc19Sjw149990 if [ $? -ne 0 ]; then 616a0261a43SJames C. McPherson $RM -f $TMPDRVCONF > /dev/null 2>&1 61760fffc19Sjw149990 gettext "failed to update bootpath.\n" 1>&2 61860fffc19Sjw149990 gettext "No changes were made to your STMS configuration.\n" 1>&2 61960fffc19Sjw149990 return 1 62060fffc19Sjw149990 fi 62160fffc19Sjw149990 fi 622789c9c8fSJames C. McPherson # If we're not using ZFS root then we need 623789c9c8fSJames C. McPherson # to keep track of what / maps to in case 624789c9c8fSJames C. McPherson # it's an active-active device and we boot from 625789c9c8fSJames C. McPherson # the other path 626789c9c8fSJames C. McPherson ROOTSCSIVHCI=`$DF /|$AWK -F":" '{print $1}' | \ 627789c9c8fSJames C. McPherson $AWK -F"(" '{print $2}'| \ 62835c62094Sjianfei wang - Sun Microsystems - Beijing China $SED -e"s,dsk,rdsk," -e"s,s.[ ]*),,"` 629789c9c8fSJames C. McPherson $STMSBOOTUTIL -L | $GREP $ROOTSCSIVHCI | \ 630789c9c8fSJames C. McPherson $AWK '{print $1}' | $SED -e"s,rdsk,dsk,g" \ 631789c9c8fSJames C. McPherson >$BOOTDEVICES 632789c9c8fSJames C. McPherson fi 633fa30e7bdSjianfei wang - Sun Microsystems - Beijing China new_rootdev=`$DF /|$AWK -F":" '{print $1}' | \ 634fa30e7bdSjianfei wang - Sun Microsystems - Beijing China $AWK -F"(" '{print $2}'| \ 635fa30e7bdSjianfei wang - Sun Microsystems - Beijing China $SED -e"s,dsk,rdsk," -e"s,[ ]*),,"` 636fa30e7bdSjianfei wang - Sun Microsystems - Beijing China svm_md_device=`$STMSBOOTUTIL -m $new_rootdev` 63760fffc19Sjw149990 update_sysfiles 63860fffc19Sjw149990 else 63960fffc19Sjw149990 echo "STMS is already ${cmd}d. No changes or reboots needed" 64060fffc19Sjw149990 fi 64160fffc19Sjw149990 64260fffc19Sjw149990 643fa30e7bdSjianfei wang - Sun Microsystems - Beijing Chinaelif [ "$cmd" = "update" ]; then 644fa30e7bdSjianfei wang - Sun Microsystems - Beijing China if [ "$MACH" = "i386" ]; then 6455a4c37c9Sqh201292 # In this case we always change the bootpath to phci-based 6465a4c37c9Sqh201292 # path first. bootpath will later be modified in mpxio-upgrade 6475a4c37c9Sqh201292 # to the vhci-based path if mpxio is enabled on root. 6485a4c37c9Sqh201292 get_newbootpath_for_stmsdev 6495a4c37c9Sqh201292 if [ $? -ne 0 ]; then 6505a4c37c9Sqh201292 gettext "failed to update bootpath.\n" 1>&2 6515a4c37c9Sqh201292 return 1 6525a4c37c9Sqh201292 fi 6535a4c37c9Sqh201292 fi 6547c478bd9Sstevel@tonic-gate update_sysfiles 65560fffc19Sjw149990 656fa30e7bdSjianfei wang - Sun Microsystems - Beijing Chinaelif [ "$cmd" = "list" ]; then 65760fffc19Sjw149990 $STMSBOOTUTIL $GUID -l $controller 6587c478bd9Sstevel@tonic-gateelse 65960fffc19Sjw149990 $STMSBOOTUTIL $GUID -L 6607c478bd9Sstevel@tonic-gatefi 6617c478bd9Sstevel@tonic-gate 6627c478bd9Sstevel@tonic-gateexit $? 663