xref: /titanic_44/usr/src/cmd/stmsboot/stmsboot.sh (revision c9d8e919f508a150163a68f1be46ba15fffebb7c)
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#
237fc66be0Sjianfei wang - Sun Microsystems - Beijing China# Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
247c478bd9Sstevel@tonic-gate#
25815dd917Sjmcp#
267c478bd9Sstevel@tonic-gatePATH=/usr/bin:/usr/sbin:$PATH; export PATH
277c478bd9Sstevel@tonic-gateSTMSBOOTUTIL=/lib/mpxio/stmsboot_util
287c478bd9Sstevel@tonic-gateSTMSMETHODSCRIPT=/lib/svc/method/mpxio-upgrade
2960fffc19Sjw149990KDRVCONF=
3060fffc19Sjw149990DRVCONF=
3160fffc19Sjw149990TMPDRVCONF=
3260fffc19Sjw149990TMPDRVCONF_MPXIO_ENTRY=
33cfc4930cSYong-Feng DuTMPDRVCONF_SATA_ENTRY=
3460fffc19Sjw149990DRVLIST=
3560fffc19Sjw149990GUID=
367c478bd9Sstevel@tonic-gateVFSTAB=/etc/vfstab
377c478bd9Sstevel@tonic-gateSAVEDIR=/etc/mpxio
38789c9c8fSJames C. McPhersonBOOTDEVICES=$SAVEDIR/boot-devices
397c478bd9Sstevel@tonic-gateRECOVERFILE=$SAVEDIR/recover_instructions
407c478bd9Sstevel@tonic-gateSVCCFG_RECOVERY=$SAVEDIR/svccfg_recover
414c06356bSdh142964SUPPORTED_DRIVERS="fp|mpt|mpt_sas|pmcs"
4260fffc19Sjw149990USAGE=`gettext "Usage: stmsboot [-D $SUPPORTED_DRIVERS] -e | -d | -u | -L | -l controller_number"`
43aca6e9ccSramatTEXTDOMAIN=SUNW_OST_OSCMD
44aca6e9ccSramatexport TEXTDOMAIN
45a0261a43SJames C. McPhersonSTMSINSTANCE=svc:system/device/mpxio-upgrade:default
46*c9d8e919Sjianfei wang - Sun Microsystems - Beijing ChinaFASTBOOTINSTANCE=svc:system/boot-config: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"
7760fffc19Sjw149990
787c478bd9Sstevel@tonic-gate#
7960fffc19Sjw149990# Copy all entries (including comments) from source driver.conf
8060fffc19Sjw149990# to destination driver.conf except those entries which contain
8160fffc19Sjw149990# the mpxio-disable property.
827c478bd9Sstevel@tonic-gate# Take into consideration entries that spawn more than one line.
837c478bd9Sstevel@tonic-gate#
847c478bd9Sstevel@tonic-gate# $1	source driver.conf file
857c478bd9Sstevel@tonic-gate# $2	destination driver.conf file
867c478bd9Sstevel@tonic-gate#
877c478bd9Sstevel@tonic-gate# Returns 0 on success, non zero on failure.
887c478bd9Sstevel@tonic-gate#
897c478bd9Sstevel@tonic-gatedelete_mpxio_disable_entries()
907c478bd9Sstevel@tonic-gate{
91a0261a43SJames C. McPherson	# be careful here, we've got embedded \t characters
92a0261a43SJames C. McPherson	# in sed's pattern space.
93a0261a43SJames C. McPherson	$SED '
947c478bd9Sstevel@tonic-gate		/^[ 	]*#/{ p
957c478bd9Sstevel@tonic-gate			      d
967c478bd9Sstevel@tonic-gate			    }
977c478bd9Sstevel@tonic-gate		s/[ 	]*$//
987c478bd9Sstevel@tonic-gate		/^$/{ p
997c478bd9Sstevel@tonic-gate		      d
1007c478bd9Sstevel@tonic-gate		    }
1015a4c37c9Sqh201292		/mpxio-disable[ 	]*=.*;$/{ w '$3'
1025a4c37c9Sqh201292						  d
1035a4c37c9Sqh201292						}
104cfc4930cSYong-Feng Du		/disable-sata-mpxio[ 	]*=.*;$/{ w '$4'
105cfc4930cSYong-Feng Du						  d
106cfc4930cSYong-Feng Du						}
1077c478bd9Sstevel@tonic-gate		/;$/{ p
1087c478bd9Sstevel@tonic-gate		      d
1097c478bd9Sstevel@tonic-gate		    }
1107c478bd9Sstevel@tonic-gate		:rdnext
1117c478bd9Sstevel@tonic-gate		N
1127c478bd9Sstevel@tonic-gate		s/[ 	]*$//
1137c478bd9Sstevel@tonic-gate		/[^;]$/b rdnext
1145a4c37c9Sqh201292		/mpxio-disable[ 	]*=/{ s/\n/ /g
1155a4c37c9Sqh201292					      w '$3'
1165a4c37c9Sqh201292					      d
1175a4c37c9Sqh201292					    }
1185a4c37c9Sqh201292		' $1 > $2
1197c478bd9Sstevel@tonic-gate
1207c478bd9Sstevel@tonic-gate	return $?
1217c478bd9Sstevel@tonic-gate}
1227c478bd9Sstevel@tonic-gate
1237c478bd9Sstevel@tonic-gate#
1247c478bd9Sstevel@tonic-gate# backup the last saved copy of the specified files.
1257c478bd9Sstevel@tonic-gate# $*	files to backup
1267c478bd9Sstevel@tonic-gate#
1277c478bd9Sstevel@tonic-gatebackup_lastsaved()
1287c478bd9Sstevel@tonic-gate{
1297c478bd9Sstevel@tonic-gate	for file in $*
1307c478bd9Sstevel@tonic-gate	do
131a0261a43SJames C. McPherson		newfile=`basename $file`
132a0261a43SJames C. McPherson		$CP $file $SAVEDIR/$newfile.$cmd.$NOW
1337c478bd9Sstevel@tonic-gate	done
1347c478bd9Sstevel@tonic-gate}
1357c478bd9Sstevel@tonic-gate
1367c478bd9Sstevel@tonic-gate#
1377c478bd9Sstevel@tonic-gate# build recover instructions
1387c478bd9Sstevel@tonic-gate#
1397c478bd9Sstevel@tonic-gate# $1	1 to include boot script in the instructions
1407c478bd9Sstevel@tonic-gate#	0 otherwise
1417c478bd9Sstevel@tonic-gate#
1427c478bd9Sstevel@tonic-gatebuild_recover()
1437c478bd9Sstevel@tonic-gate{
1447c478bd9Sstevel@tonic-gate	gettext "Instructions to recover your previous STMS configuration (if in case the system does not boot):\n\n" > $RECOVERFILE
1457c478bd9Sstevel@tonic-gate	echo "\tboot net \c"  >> $RECOVERFILE
1467c478bd9Sstevel@tonic-gate	gettext "(or from a cd/dvd/another disk)\n" >> $RECOVERFILE
1477c478bd9Sstevel@tonic-gate	echo "\tfsck <your-root-device>" >> $RECOVERFILE
1487c478bd9Sstevel@tonic-gate	echo "\tmount <your-root-device> /mnt" >> $RECOVERFILE
1497c478bd9Sstevel@tonic-gate
150fa30e7bdSjianfei wang - Sun Microsystems - Beijing China	if [ "$cmd" = "update" ]; then
1517c478bd9Sstevel@tonic-gate		gettext "\tUndo the modifications you made to STMS configuration.\n\tFor example undo any changes you made to " >> $RECOVERFILE
15260fffc19Sjw149990		echo "/mnt$KDRVCONF." >> $RECOVERFILE
1537c478bd9Sstevel@tonic-gate	else
154a0261a43SJames C. McPherson		echo "\tcp /mnt${SAVEDIR}/$DRVCONF.$cmd.$NOW /mnt$KDRVCONF" >> $RECOVERFILE
1557c478bd9Sstevel@tonic-gate	fi
1567c478bd9Sstevel@tonic-gate
157815dd917Sjmcp	if [ $1 -eq 1 ]; then
158a0261a43SJames C. McPherson		echo "\tcp /mnt${SAVEDIR}/vfstab.$cmd.$NOW /mnt$VFSTAB" >> $RECOVERFILE
1597c478bd9Sstevel@tonic-gate
1607c478bd9Sstevel@tonic-gate		echo "repository /mnt/etc/svc/repository.db" > $SVCCFG_RECOVERY
1617c478bd9Sstevel@tonic-gate		echo "select $STMSINSTANCE" >> $SVCCFG_RECOVERY
1627c478bd9Sstevel@tonic-gate		echo "setprop general/enabled=false" >> $SVCCFG_RECOVERY
1637c478bd9Sstevel@tonic-gate		echo "exit" >> $SVCCFG_RECOVERY
1647c478bd9Sstevel@tonic-gate
165815dd917Sjmcp		echo "\t$SVCCFG -f /mnt$SVCCFG_RECOVERY" >> $RECOVERFILE
1665a4c37c9Sqh201292
167fa30e7bdSjianfei wang - Sun Microsystems - Beijing China		if [ -n "$new_bootpath" -a "$MACH" = "i386" ]; then
168a0261a43SJames C. McPherson			echo "\tcp /mnt${SAVEDIR}/bootenv.rc.$cmd.$NOW /mnt/boot/solaris/$BOOTENV_FILE" >> $RECOVERFILE
1695a4c37c9Sqh201292		fi
1707c478bd9Sstevel@tonic-gate	fi
1717c478bd9Sstevel@tonic-gate
17260fffc19Sjw149990	rootdisk=`$MOUNT | $GREP "/ on " | cut -f 3 -d " "`
1737c478bd9Sstevel@tonic-gate	echo "\tumount /mnt\n\treboot\n\n${rootdisk} \c" >> $RECOVERFILE
1747c478bd9Sstevel@tonic-gate	gettext "was your root device,\nbut it could be named differently after you boot net.\n" >> $RECOVERFILE
1757c478bd9Sstevel@tonic-gate}
1767c478bd9Sstevel@tonic-gate
177a0261a43SJames C. McPherson
1787c478bd9Sstevel@tonic-gate#
1797c478bd9Sstevel@tonic-gate# Arrange for /etc/vfstab and dump configuration to be updated
1807c478bd9Sstevel@tonic-gate# during the next reboot. If the cmd is "enable" or "disable", copy
18160fffc19Sjw149990# $TMPDRVCONF to $KDRVCONF.
1827c478bd9Sstevel@tonic-gate#
1837c478bd9Sstevel@tonic-gate# Returns 0 on success, 1 on failure.
1847c478bd9Sstevel@tonic-gate#
1857c478bd9Sstevel@tonic-gateupdate_sysfiles()
1867c478bd9Sstevel@tonic-gate{
18760fffc19Sjw149990
188a0261a43SJames C. McPherson	gettext "WARNING: This operation will require a reboot.\n"
189a0261a43SJames C. McPherson	gettext "Do you want to continue ? [y/n] (default: y) "
1907c478bd9Sstevel@tonic-gate	read response
1917c478bd9Sstevel@tonic-gate
192fa30e7bdSjianfei wang - Sun Microsystems - Beijing China	if [ -n "$response" -a "$response" != "y" -a \
193fa30e7bdSjianfei wang - Sun Microsystems - Beijing China	    "$response" != "Y" ]; then
19460fffc19Sjw149990		for d in $DRVLIST; do
19560fffc19Sjw149990			TMPDRVCONF=/var/run/tmp.$d.conf.$$
196a0261a43SJames C. McPherson			$RM -f $TMPDRVCONF > /dev/null 2>&1
19760fffc19Sjw149990		done;
19860fffc19Sjw149990		return 0;
1997c478bd9Sstevel@tonic-gate	fi
2007c478bd9Sstevel@tonic-gate
201815dd917Sjmcp	# set need_bootscript to the number of drivers that
202815dd917Sjmcp	# we support.
203815dd917Sjmcp	need_bootscript=`echo $SUPPORTED_DRIVERS|$AWK -F"|" '{print NF}'`
20460fffc19Sjw149990
205fa30e7bdSjianfei wang - Sun Microsystems - Beijing China	if [ "$cmd" = "enable" -o "$cmd" = "disable" ]; then
20660fffc19Sjw149990
20760fffc19Sjw149990		for d in $DRVLIST; do
20860fffc19Sjw149990			DRVCONF=$d.conf
20960fffc19Sjw149990			KDRVCONF=/kernel/drv/$d.conf
21060fffc19Sjw149990			TMPDRVCONF=/var/run/tmp.$d.conf.$$
21160fffc19Sjw149990
212a0261a43SJames C. McPherson			$CP $KDRVCONF $SAVEDIR/`basename $KDRVCONF`.$cmd.$NOW
213815dd917Sjmcp			if [ -f $TMPDRVCONF ]; then
214a0261a43SJames C. McPherson				$CP $TMPDRVCONF $KDRVCONF
215a0261a43SJames C. McPherson				$RM -f $TMPDRVCONF
216815dd917Sjmcp			else
217815dd917Sjmcp				# if $TMPDRVCONF doesn't exist, then we
218815dd917Sjmcp				# haven't made any changes to it
219815dd917Sjmcp				continue;
220815dd917Sjmcp			fi
2217c478bd9Sstevel@tonic-gate
2227c478bd9Sstevel@tonic-gate			#
2237c478bd9Sstevel@tonic-gate			# there is no need to update the system files in the following
2247c478bd9Sstevel@tonic-gate			# cases:
2257c478bd9Sstevel@tonic-gate			# - we are enabling mpxio and the system has no configured
2267c478bd9Sstevel@tonic-gate			#   disks accessible by phci paths.
2277c478bd9Sstevel@tonic-gate			# - we are disabling mpxio and the system has no configured
2287c478bd9Sstevel@tonic-gate			#   disks accessible by vhci paths.
2297c478bd9Sstevel@tonic-gate			#
23060fffc19Sjw149990
231815dd917Sjmcp			# Function to setup the CLIENT_TYPE_PHCI string based on
232815dd917Sjmcp			# the list of drivers that we're operating on. The variable
233815dd917Sjmcp			# depends upon the pathname of the parent node in the
234815dd917Sjmcp			# device tree, which can be different on x86/x64 and sparc.
235815dd917Sjmcp
236a0261a43SJames C. McPherson			CLIENT_TYPE_PHCI=`$STMSBOOTUTIL -D $d -N`;
237815dd917Sjmcp
238fa30e7bdSjianfei wang - Sun Microsystems - Beijing China			if [ -z "$CLIENT_TYPE_PHCI" ]; then
23960fffc19Sjw149990				continue;
24060fffc19Sjw149990			fi
24160fffc19Sjw149990
242fa30e7bdSjianfei wang - Sun Microsystems - Beijing China			if [ "$cmd" = "enable" ]; then
243a0261a43SJames C. McPherson				$LS -l /dev/dsk/*s2 2> /dev/null | \
24460fffc19Sjw149990				    $EGREP -s "$CLIENT_TYPE_PHCI"
2457c478bd9Sstevel@tonic-gate			else
246a0261a43SJames C. McPherson				$LS -l /dev/dsk/*s2 2> /dev/null | \
24760fffc19Sjw149990				    $EGREP -s "$CLIENT_TYPE_VHCI"
2487c478bd9Sstevel@tonic-gate			fi
2497c478bd9Sstevel@tonic-gate
2507c478bd9Sstevel@tonic-gate			if [ $? -ne 0 ]; then
251815dd917Sjmcp				need_bootscript=`$EXPR $need_bootscript - 1`
25260fffc19Sjw149990			fi
25360fffc19Sjw149990		done
25460fffc19Sjw149990	fi
25560fffc19Sjw149990
256815dd917Sjmcp	if [ $need_bootscript -gt 0 ]; then
257815dd917Sjmcp		need_bootscript=1
258fa30e7bdSjianfei wang - Sun Microsystems - Beijing China		if [  -n "$new_bootpath" -a "$MACH" = "i386" ]; then
2595a4c37c9Sqh201292			#only update bootpath for x86.
260a0261a43SJames C. McPherson			$CP /boot/solaris/$BOOTENV_FILE $SAVEDIR/$BOOTENV_FILE.$cmd.$NOW
261a0261a43SJames C. McPherson			$EEPROM bootpath="$new_bootpath"
2625a4c37c9Sqh201292		fi
263*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China
264*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China		if [ "$MACH" = "i386" ]; then
265*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China			# Disable Fast Reboot temporarily for the next reboot only.
266*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China			HASZFSROOT=`$DF -g / |$GREP zfs`
267*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China			if [ -n "$HASZFSROOT" ]; then
268*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China				$SVCCFG -s $FASTBOOTINSTANCE addpg config_ovr application P > /dev/null 2>&1
269*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China				$SVCCFG -s $FASTBOOTINSTANCE \
270*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China				    setprop config_ovr/fastreboot_default=boolean:\"false\"
271*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China				$SVCCFG -s $FASTBOOTINSTANCE \
272*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China				    setprop config_ovr/fastreboot_onpanic=boolean:\"false\"
273*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China				$SVCADM refresh $FASTBOOTINSTANCE
274*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China			fi
275*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China		fi
276*c9d8e919Sjianfei wang - Sun Microsystems - Beijing China
277a0261a43SJames C. McPherson		# Enable the mpxio-upgrade service for the reboot
278815dd917Sjmcp		$SVCADM disable -t $STMSINSTANCE
279a0261a43SJames C. McPherson		$SVCCFG -s $STMSINSTANCE "setprop general/enabled=true"
280815dd917Sjmcp	else
281815dd917Sjmcp		need_bootscript=0
2827c478bd9Sstevel@tonic-gate	fi
2837c478bd9Sstevel@tonic-gate
2847c478bd9Sstevel@tonic-gate	build_recover $need_bootscript
2857c478bd9Sstevel@tonic-gate
286fa30e7bdSjianfei wang - Sun Microsystems - Beijing China	if [ "$MACH" = "i386" ]; then
28760fffc19Sjw149990		$BOOTADM update-archive
28860fffc19Sjw149990	fi
28960fffc19Sjw149990
2907c478bd9Sstevel@tonic-gate	gettext "The changes will come into effect after rebooting the system.\nReboot the system now ? [y/n] (default: y) "
2917c478bd9Sstevel@tonic-gate	read response
2927c478bd9Sstevel@tonic-gate
293fa30e7bdSjianfei wang - Sun Microsystems - Beijing China	if [ -z "$response" -o "$response" = "y" -o \
294fa30e7bdSjianfei wang - Sun Microsystems - Beijing China	    "$response" = "Y" ]; then
295a0261a43SJames C. McPherson		$REBOOT
2967c478bd9Sstevel@tonic-gate	fi
2977c478bd9Sstevel@tonic-gate
2987c478bd9Sstevel@tonic-gate	return 0
2997c478bd9Sstevel@tonic-gate}
3007c478bd9Sstevel@tonic-gate
301a0261a43SJames C. McPherson
3027c478bd9Sstevel@tonic-gate#
3037c478bd9Sstevel@tonic-gate# Enable or disable mpxio as specified by the cmd.
3047c478bd9Sstevel@tonic-gate# Returns 0 on success, 1 on failure.
3057c478bd9Sstevel@tonic-gate#
30660fffc19Sjw149990# Args: $cmd = {enable | disable}
3074c06356bSdh142964#	$d = {fp | mpt | mpt_sas | pmcs}
30860fffc19Sjw149990#
30960fffc19Sjw149990# the global variable $DRVLIST is used
31060fffc19Sjw149990#
3117c478bd9Sstevel@tonic-gateconfigure_mpxio()
3127c478bd9Sstevel@tonic-gate{
313a0261a43SJames C. McPherson	# be careful here, we've got embedded \t characters
314a0261a43SJames C. McPherson	# in sed's pattern space.
3155a4c37c9Sqh201292	mpxiodisableno='mpxio-disable[ 	]*=[ 	]*"no"[ 	]*;'
3165a4c37c9Sqh201292	mpxiodisableyes='mpxio-disable[ 	]*=[ 	]*"yes"[ 	]*;'
317cfc4930cSYong-Feng Du	satadisableno='disable-sata-mpxio[ 	]*=[ 	]*"no"[ 	]*;'
318cfc4930cSYong-Feng Du	satadisableyes='disable-sata-mpxio[ 	]*=[ 	]*"yes"[ 	]*;'
3195a4c37c9Sqh201292
320fa30e7bdSjianfei wang - Sun Microsystems - Beijing China	if [ "$cmd" = "enable" ]; then
3215a4c37c9Sqh201292		mpxiodisable_cur_entry=$mpxiodisableyes
322cfc4930cSYong-Feng Du		satadisable_cur_entry=$satadisableyes
3237c478bd9Sstevel@tonic-gate		propval=no
32460fffc19Sjw149990		msg=`gettext "STMS already enabled"`
3257c478bd9Sstevel@tonic-gate	else
3265a4c37c9Sqh201292		mpxiodisable_cur_entry=$mpxiodisableno
327cfc4930cSYong-Feng Du		satadisable_cur_entry=$satadisableno
3287c478bd9Sstevel@tonic-gate		propval=yes
32960fffc19Sjw149990		msg=`gettext "STMS already disabled"`
3307c478bd9Sstevel@tonic-gate	fi
3317c478bd9Sstevel@tonic-gate
33260fffc19Sjw149990	DRVCONF=$d.conf
33360fffc19Sjw149990	KDRVCONF=/kernel/drv/$d.conf
33460fffc19Sjw149990	TMPDRVCONF=/var/run/tmp.$d.conf.$$
33560fffc19Sjw149990	TMPDRVCONF_MPXIO_ENTRY=/var/run/tmp.$d.conf.mpxioentry.$$;
336cfc4930cSYong-Feng Du	TMPDRVCONF_SATA_ENTRY=/var/run/tmp.$d.conf.sataentry.$$;
33760fffc19Sjw149990
338cfc4930cSYong-Feng Du	if delete_mpxio_disable_entries $KDRVCONF $TMPDRVCONF $TMPDRVCONF_MPXIO_ENTRY $TMPDRVCONF_SATA_ENTRY; then
33960fffc19Sjw149990
34060fffc19Sjw149990		if [ -s $TMPDRVCONF_MPXIO_ENTRY ]; then
34160fffc19Sjw149990			# $DRVCONF does have mpxiodisable entries
34260fffc19Sjw149990			$EGREP -s "$mpxiodisable_cur_entry" $TMPDRVCONF_MPXIO_ENTRY
343cfc4930cSYong-Feng Du			if [ $? -eq 0 ]; then
344cfc4930cSYong-Feng Du				reboot_needed=`$EXPR $reboot_needed + 1`
345cfc4930cSYong-Feng Du			else
3465a4c37c9Sqh201292				# if all mpxiodisable entries are no/yes for
3475a4c37c9Sqh201292				# enable/disable mpxio, notify the user
348cfc4930cSYong-Feng Du				$EGREP -s "$satadisable_cur_entry" $TMPDRVCONF_SATA_ENTRY
349fa30e7bdSjianfei wang - Sun Microsystems - Beijing China				if [ $? -eq 0 -a "$d" = "mpt" ]; then
35060fffc19Sjw149990					reboot_needed=`$EXPR $reboot_needed + 1`
351cfc4930cSYong-Feng Du				else
352cfc4930cSYong-Feng Du					$RM -f $TMPDRVCONF $TMPDRVCONF_MPXIO_ENTRY $TMPDRVCONF_SATA_ENTRY > /dev/null 2>&1
353ccb7005eSYong-Feng Du					return 0;
354cfc4930cSYong-Feng Du				fi
3557c478bd9Sstevel@tonic-gate			fi
35660fffc19Sjw149990
35760fffc19Sjw149990			# If mpxiodisable entries do not exist, always continue update
3585a4c37c9Sqh201292		fi
3597c478bd9Sstevel@tonic-gate	else
360cfc4930cSYong-Feng Du		$RM -f $TMPDRVCONF $TMPDRVCONF_MPXIO_ENTRY $TMPDRVCONF_SATA_ENTRY > /dev/null 2>&1
3617c478bd9Sstevel@tonic-gate		gettext "failed to update " 1>&2
36260fffc19Sjw149990		echo "$KDRVCONF." 1>&2
3637c478bd9Sstevel@tonic-gate		gettext "No changes were made to your STMS configuration.\n" 1>&2
3647c478bd9Sstevel@tonic-gate		return 1
3657c478bd9Sstevel@tonic-gate	fi
3665a4c37c9Sqh201292
36735c62094Sjianfei wang - Sun Microsystems - Beijing China	rm $TMPDRVCONF_MPXIO_ENTRY $TMPDRVCONF_SATA_ENTRY > /dev/null 2>&1
36860fffc19Sjw149990	echo "mpxio-disable=\"${propval}\";" >> $TMPDRVCONF
369fa30e7bdSjianfei wang - Sun Microsystems - Beijing China	if [ "$d" = "mpt" ]; then
370cfc4930cSYong-Feng Du		echo "disable-sata-mpxio=\"${propval}\";" >> $TMPDRVCONF
37135c62094Sjianfei wang - Sun Microsystems - Beijing China	fi
3725a4c37c9Sqh201292
3737c478bd9Sstevel@tonic-gate}
3747c478bd9Sstevel@tonic-gate
3757c478bd9Sstevel@tonic-gatesetcmd()
3767c478bd9Sstevel@tonic-gate{
377fa30e7bdSjianfei wang - Sun Microsystems - Beijing China	if [ "$cmd" = "none" ]; then
3787c478bd9Sstevel@tonic-gate		cmd=$1
3797c478bd9Sstevel@tonic-gate	else
3807c478bd9Sstevel@tonic-gate		echo "$USAGE" 1>&2
3817c478bd9Sstevel@tonic-gate		exit 2
3827c478bd9Sstevel@tonic-gate	fi
3837c478bd9Sstevel@tonic-gate}
3847c478bd9Sstevel@tonic-gate
38560fffc19Sjw149990#
3865a4c37c9Sqh201292# Need to update bootpath on x86 if boot system from FC disk
3875a4c37c9Sqh201292# Only update bootpath here when mpxio is enabled
388a0261a43SJames C. McPherson# If mpxio is currently disabled, then we'll update bootpath in the
389a0261a43SJames C. McPherson# mpxio-upgrade service method on reboot.
39060fffc19Sjw149990#
39160fffc19Sjw149990
3925a4c37c9Sqh201292get_newbootpath_for_stmsdev() {
393fa30e7bdSjianfei wang - Sun Microsystems - Beijing China	if [ "$cmd" = "enable" ]; then
3945a4c37c9Sqh201292		return 0
3955a4c37c9Sqh201292	fi
3965a4c37c9Sqh201292
397a0261a43SJames C. McPherson	cur_bootpath=`$STMSBOOTUTIL -b`
398a0261a43SJames C. McPherson	if [ $? != 0 ]; then
3995a4c37c9Sqh201292		return 1
4005a4c37c9Sqh201292	fi
4015a4c37c9Sqh201292
402a0261a43SJames C. McPherson	# Since on x64 platforms the eeprom command doesn't update the
403a0261a43SJames C. McPherson	# kernel, the file /boot/solaris/bootenv.rc and the kernel's
404a0261a43SJames C. McPherson	# bootpath variable have a good chance of differing. We do some
405a0261a43SJames C. McPherson	# extra handwaving to get the correct bootpath variable setting.
406a0261a43SJames C. McPherson
407a0261a43SJames C. McPherson	ONDISKVER=`$AWK '/bootpath/ {print $3}' /boot/solaris/bootenv.rc|\
408a0261a43SJames C. McPherson		$SED -e"s,',,g"`
409fa30e7bdSjianfei wang - Sun Microsystems - Beijing China	if [ "$ONDISKVER" != "$cur_bootpath" ]; then
410a0261a43SJames C. McPherson		cur_bootpath="$ONDISKVER"
411a0261a43SJames C. McPherson	fi
412a0261a43SJames C. McPherson
413a0261a43SJames C. McPherson	NEWBOOTPATH=""
414a0261a43SJames C. McPherson	for path in $cur_bootpath; do
415a0261a43SJames C. McPherson		mapped=`$STMSBOOTUTIL -p $path`
416a0261a43SJames C. McPherson		if [ "$mapped" != "NOT_MAPPED" ]; then
417a0261a43SJames C. McPherson			if [ "$mapped" != "$path" ]; then
418a0261a43SJames C. McPherson				NEWBOOTPATH=`echo "$path " | \
419a0261a43SJames C. McPherson				   $SED -e"s|$path|$mapped|"`" $NEWBOOTPATH"
420a0261a43SJames C. McPherson			else
421a0261a43SJames C. McPherson				NEWBOOTPATH="$NEWBOOTPATH $path"
422a0261a43SJames C. McPherson			fi
423a0261a43SJames C. McPherson		fi
424a0261a43SJames C. McPherson	done
425a0261a43SJames C. McPherson	# now strip off leading and trailing space chars
426a0261a43SJames C. McPherson	new_bootpath=`echo $NEWBOOTPATH`
4275a4c37c9Sqh201292	return 0
42860fffc19Sjw149990}
42960fffc19Sjw149990
43060fffc19Sjw149990#
43160fffc19Sjw149990# Emit a warning message to the user that by default we
43260fffc19Sjw149990# operate on all multipath-capable controllers that are
43360fffc19Sjw149990# attached to the system, and that if they want to operate
4344c06356bSdh142964# on only a specific controller type (fp|mpt|mpt_sas|pmcs|....) then
43560fffc19Sjw149990# they need to re-invoke stmsboot with "-D $driver" in
43660fffc19Sjw149990# their argument list
43760fffc19Sjw149990#
43860fffc19Sjw149990
43960fffc19Sjw149990emit_driver_warning_msg() {
44060fffc19Sjw149990
44160fffc19Sjw149990	# for each driver that we support, grab the list
44260fffc19Sjw149990	# of controllers attached to the system.
44360fffc19Sjw149990
444815dd917Sjmcp	echo ""
44553ed03b5Sjmcp	gettext "WARNING: stmsboot operates on each supported multipath-capable controller\n"
44653ed03b5Sjmcp	gettext "         detected in a host. In your system, these controllers are\n\n"
44760fffc19Sjw149990
448815dd917Sjmcp	for WARNDRV in `echo $SUPPORTED_DRIVERS| $SED -e"s,|, ,g"`; do
449a0261a43SJames C. McPherson		$STMSBOOTUTIL -D $WARNDRV -n
45060fffc19Sjw149990	done;
45160fffc19Sjw149990
45260fffc19Sjw149990	echo ""
45353ed03b5Sjmcp	gettext "If you do NOT wish to operate on these controllers, please quit stmsboot\n"
4544c06356bSdh142964	gettext "and re-invoke with -D { fp | mpt | mpt_sas | pmcs} to specify which controllers you wish\n"
45553ed03b5Sjmcp	gettext "to modify your multipathing configuration for.\n"
45660fffc19Sjw149990
457815dd917Sjmcp	echo ""
45853ed03b5Sjmcp	gettext "Do you wish to continue? [y/n] (default: y) "
45960fffc19Sjw149990	read response
46060fffc19Sjw149990
461fa30e7bdSjianfei wang - Sun Microsystems - Beijing China	if [ -n "$response" -a "$response" != "Y" -a \
462fa30e7bdSjianfei wang - Sun Microsystems - Beijing China	    "$response" != "y" ]; then
46360fffc19Sjw149990		exit
46460fffc19Sjw149990	fi
46560fffc19Sjw149990}
46660fffc19Sjw149990
4677c478bd9Sstevel@tonic-gate
468a0261a43SJames C. McPherson#
469a0261a43SJames C. McPherson#
470a0261a43SJames C. McPherson# main starts here
471a0261a43SJames C. McPherson#
472a0261a43SJames C. McPherson
473a0261a43SJames C. McPhersoncmd=none
4747c478bd9Sstevel@tonic-gate# process options
47560fffc19Sjw149990while getopts D:geduLl: c
4767c478bd9Sstevel@tonic-gatedo
4777c478bd9Sstevel@tonic-gate	case $c in
4787c478bd9Sstevel@tonic-gate	e)	setcmd enable;;
4797c478bd9Sstevel@tonic-gate	d)	setcmd disable;;
4807c478bd9Sstevel@tonic-gate	u)	setcmd update;;
4817c478bd9Sstevel@tonic-gate	L)	setcmd listall;;
4827c478bd9Sstevel@tonic-gate	l)	setcmd list
4837c478bd9Sstevel@tonic-gate		controller=$OPTARG;;
48460fffc19Sjw149990	D)	DRV=$OPTARG;;
48560fffc19Sjw149990	g)	GUID="-g";;
4867c478bd9Sstevel@tonic-gate	\?)	echo "$USAGE" 1>&2
4877c478bd9Sstevel@tonic-gate		exit 2;;
4887c478bd9Sstevel@tonic-gate	esac
4897c478bd9Sstevel@tonic-gatedone
4907c478bd9Sstevel@tonic-gate
491fa30e7bdSjianfei wang - Sun Microsystems - Beijing Chinaif [ "$cmd" = "none" ]; then
4927c478bd9Sstevel@tonic-gate	echo "$USAGE" 1>&2
4937c478bd9Sstevel@tonic-gate	exit 2
4947c478bd9Sstevel@tonic-gatefi
4957c478bd9Sstevel@tonic-gate
496fa30e7bdSjianfei wang - Sun Microsystems - Beijing Chinaif [ -z "$DRV" ]; then
4974c06356bSdh142964	DRVLIST="fp mpt mpt_sas pmcs"
49860fffc19Sjw149990else
49960fffc19Sjw149990	DRVLIST=$DRV
50060fffc19Sjw149990fi
50160fffc19Sjw149990
50234c94816SjmcpUSERID=`id | $EGREP "uid=0"`
50334c94816Sjmcpif [ -z "$USERID" ]; then
5047c478bd9Sstevel@tonic-gate	gettext "You must be super-user to run this script.\n" 1>&2
5057c478bd9Sstevel@tonic-gate	exit 1
5067c478bd9Sstevel@tonic-gatefi
5077c478bd9Sstevel@tonic-gate
5087c478bd9Sstevel@tonic-gate# just a sanity check
5097c478bd9Sstevel@tonic-gateif [ ! -f $STMSBOOTUTIL -o ! -f $STMSMETHODSCRIPT ]; then
5107c478bd9Sstevel@tonic-gate	fmt=`gettext "Can't find %s and/or %s"`
5117c478bd9Sstevel@tonic-gate	printf "$fmt\n" "$STMSBOOTUTIL" "$STMSMETHODSCRIPT" 1>&2
5127c478bd9Sstevel@tonic-gate	exit 1
5137c478bd9Sstevel@tonic-gatefi
5147c478bd9Sstevel@tonic-gate
51560fffc19Sjw149990# If the old sun4u-specific SMF method is found, remove it
516815dd917Sjmcp$SVCCFG -s "platform/sun4u/mpxio-upgrade:default" < /dev/null > /dev/null 2>&1
517815dd917Sjmcpif [ $? -eq 0 ]; then
518815dd917Sjmcp	$SVCCFG delete "platform/sun4u/mpxio-upgrade:default" > /dev/null 2>&1
51960fffc19Sjw149990fi
52060fffc19Sjw149990
52160fffc19Sjw149990# now import the new service, if necessary
522815dd917Sjmcp$SVCPROP -q $STMSINSTANCE < /dev/null > /dev/null 2>&1
52360fffc19Sjw149990if [ $? -ne 0 ]; then
5249444c26fSTom Whitten	if [ -f /lib/svc/manifest/system/device/mpxio-upgrade.xml ]; then
5259444c26fSTom Whitten		$SVCCFG import /lib/svc/manifest/system/device/mpxio-upgrade.xml
52660fffc19Sjw149990		if [ $? -ne 0 ]; then
527fa30e7bdSjianfei wang - Sun Microsystems - Beijing China
52853ed03b5Sjmcp			fmt=`gettext "Unable to import the %s service"`
5297c478bd9Sstevel@tonic-gate			printf "$fmt\n" "$STMSINSTANCE" 1>&2
5307c478bd9Sstevel@tonic-gate			exit 1
53160fffc19Sjw149990		else
53260fffc19Sjw149990			fmt=`gettext "Service %s imported successfully, continuing"`
53360fffc19Sjw149990			printf "$fmt\n" "$STMSINSTANCE" 1>&2
53460fffc19Sjw149990		fi
53560fffc19Sjw149990	else
53660fffc19Sjw149990		fmt=`gettext "Service %s does not exist on this host"`
53760fffc19Sjw149990 		printf "$fmt\n" "$STMSINSTANCE" 1>&2
53860fffc19Sjw149990		exit 1
53960fffc19Sjw149990	fi
5407c478bd9Sstevel@tonic-gatefi
5417c478bd9Sstevel@tonic-gate
542a0261a43SJames C. McPherson
543a0261a43SJames C. McPherson# make sure we can stash our data somewhere private
544a0261a43SJames C. McPhersonif [ ! -d $SAVEDIR ]; then
545a0261a43SJames C. McPherson	$MKDIR -p $SAVEDIR
546a0261a43SJames C. McPhersonfi
547a0261a43SJames C. McPherson# prime the cache
548a0261a43SJames C. McPherson$STMSBOOTUTIL -i
549a0261a43SJames C. McPherson
550a0261a43SJames C. McPherson
551fa30e7bdSjianfei wang - Sun Microsystems - Beijing Chinaif [ "$cmd" = "enable" -o "$cmd" = "disable" -o "$cmd" = "update" ]; then
5527c478bd9Sstevel@tonic-gate	#
5537c478bd9Sstevel@tonic-gate	# The bootup script doesn't work on cache-only-clients as the script
5546deb031bSsjelinek	# is executed before the plumbing for cachefs mounting of root is done.
5557c478bd9Sstevel@tonic-gate	#
55660fffc19Sjw149990	if $MOUNT -v | $EGREP -s " on / type (nfs|cachefs) "; then
557a0261a43SJames C. McPherson		gettext "This command option is not supported on systems with an nfs or cachefs mounted root filesystem.\n" 1>&2
5587c478bd9Sstevel@tonic-gate		exit 1
5597c478bd9Sstevel@tonic-gate	fi
5607c478bd9Sstevel@tonic-gate
561815dd917Sjmcp	# if the user has left the system with the mpxio-upgrade service
562815dd917Sjmcp	# in a temporarily disabled state (ie, service is armed for the next
563815dd917Sjmcp	# reboot), then let them know. We need to ensure that the system is
564815dd917Sjmcp	# is in a sane state before allowing any further invocations, so
565815dd917Sjmcp	# try to get the system admin to do so
566815dd917Sjmcp
567a0261a43SJames C. McPherson	ISARMED=`$SVCS -l $STMSINSTANCE|$GREP "enabled.*false.*temporary"`
568a0261a43SJames C. McPherson	if [ ! $? ]; then
569815dd917Sjmcp		echo ""
57053ed03b5Sjmcp		gettext "You need to reboot the system in order to complete\n"
57153ed03b5Sjmcp		gettext "the previous invocation of stmsboot.\n"
572815dd917Sjmcp		echo ""
57353ed03b5Sjmcp		gettext "Do you wish to reboot the system now? (y/n, default y) "
574815dd917Sjmcp		read response
575815dd917Sjmcp
576fa30e7bdSjianfei wang - Sun Microsystems - Beijing China		if [ -z "$response" -o "x$response" = "Y" -o \
577fa30e7bdSjianfei wang - Sun Microsystems - Beijing China		    "$response" = "y" ]; then
578a0261a43SJames C. McPherson			$REBOOT
579815dd917Sjmcp		else
58053ed03b5Sjmcp			echo ""
58153ed03b5Sjmcp			gettext "Please reboot this system before continuing\n"
58253ed03b5Sjmcp			echo ""
583815dd917Sjmcp			exit 1
584815dd917Sjmcp		fi
585815dd917Sjmcp	fi
586815dd917Sjmcp
5877c478bd9Sstevel@tonic-gate	#
5887c478bd9Sstevel@tonic-gate	# keep a copy of the last saved files, useful for manual
5897c478bd9Sstevel@tonic-gate	# recovery in case of a problem.
5907c478bd9Sstevel@tonic-gate	#
59160fffc19Sjw149990	for d in $DRVLIST; do
59260fffc19Sjw149990		DRVCONF=$d.conf
59360fffc19Sjw149990		KDRVCONF=/kernel/drv/$d.conf
59460fffc19Sjw149990		TMPDRVCONF=/var/run/tmp.$d.conf.$$
59560fffc19Sjw149990		TMPDRVCONF_MPXIO_ENTRY=/var/run/tmp.$d.conf.mpxioentry.$$;
596fa30e7bdSjianfei wang - Sun Microsystems - Beijing China		if [ "$MACH" = "sparc" ]; then
59760fffc19Sjw149990			backup_lastsaved $KDRVCONF $VFSTAB
5987c478bd9Sstevel@tonic-gate		else
599a0261a43SJames C. McPherson			backup_lastsaved $KDRVCONF $VFSTAB /boot/solaris/$BOOTENV_FILE
6005a4c37c9Sqh201292		fi
60160fffc19Sjw149990	done
6027c478bd9Sstevel@tonic-gatefi
6037c478bd9Sstevel@tonic-gate
604fa30e7bdSjianfei wang - Sun Microsystems - Beijing Chinaif [ "$cmd" = "enable" -o "$cmd" = "disable" ]; then
60560fffc19Sjw149990
6067fc66be0Sjianfei wang - Sun Microsystems - Beijing China	msgneeded=`echo "$DRVLIST" |$GREP " "`
60760fffc19Sjw149990	if [ -n "$msgneeded" ]; then
60860fffc19Sjw149990		emit_driver_warning_msg
60960fffc19Sjw149990	fi
61060fffc19Sjw149990	for d in $DRVLIST; do
61160fffc19Sjw149990		configure_mpxio $cmd $d
61260fffc19Sjw149990	done
61360fffc19Sjw149990
61460fffc19Sjw149990	if [ $reboot_needed -ne 0 ]; then
61560fffc19Sjw149990		# Need to update bootpath on x86 if our boot device is
61660fffc19Sjw149990		# now accessed through mpxio.
61760fffc19Sjw149990		# Only update bootpath before reboot when mpxio is enabled
61860fffc19Sjw149990		# If mpxio is currently disabled, we will update bootpath
61960fffc19Sjw149990		# on reboot in the mpxio-upgrade service
62060fffc19Sjw149990
621fa30e7bdSjianfei wang - Sun Microsystems - Beijing China		if [ "$cmd" = "disable" ]; then
622fa30e7bdSjianfei wang - Sun Microsystems - Beijing China			if [ "$MACH" = "i386" ]; then
62360fffc19Sjw149990				get_newbootpath_for_stmsdev
62460fffc19Sjw149990				if [ $? -ne 0 ]; then
625a0261a43SJames C. McPherson					$RM -f $TMPDRVCONF > /dev/null 2>&1
62660fffc19Sjw149990					gettext "failed to update bootpath.\n" 1>&2
62760fffc19Sjw149990					gettext "No changes were made to your STMS configuration.\n" 1>&2
62860fffc19Sjw149990					return 1
62960fffc19Sjw149990				fi
63060fffc19Sjw149990			fi
631789c9c8fSJames C. McPherson			# If we're not using ZFS root then we need
632789c9c8fSJames C. McPherson			# to keep track of what / maps to in case
633789c9c8fSJames C. McPherson			# it's an active-active device and we boot from
634789c9c8fSJames C. McPherson			# the other path
6357fc66be0Sjianfei wang - Sun Microsystems - Beijing China			HASZFSROOT=`$DF -g / |$GREP zfs`
6367fc66be0Sjianfei wang - Sun Microsystems - Beijing China			if [ -z "$HASZFSROOT" ]; then
637789c9c8fSJames C. McPherson				ROOTSCSIVHCI=`$DF /|$AWK -F":" '{print $1}' | \
6387fc66be0Sjianfei wang - Sun Microsystems - Beijing China					$AWK -F"(" '{print $2}'| $SED -e"s,),,"`
6397fc66be0Sjianfei wang - Sun Microsystems - Beijing China				TMPROOTDEV=`$LS -l $ROOTSCSIVHCI |$AWK -F">" '{print $2}' | \
6407fc66be0Sjianfei wang - Sun Microsystems - Beijing China					$SED -e"s, ../../devices,,"`
6417fc66be0Sjianfei wang - Sun Microsystems - Beijing China				$STMSBOOTUTIL -q $TMPROOTDEV > $BOOTDEVICES
6427fc66be0Sjianfei wang - Sun Microsystems - Beijing China			fi
643789c9c8fSJames C. McPherson		fi
64460fffc19Sjw149990		update_sysfiles
64560fffc19Sjw149990	else
64660fffc19Sjw149990		echo "STMS is already ${cmd}d. No changes or reboots needed"
64760fffc19Sjw149990	fi
64860fffc19Sjw149990
64960fffc19Sjw149990
650fa30e7bdSjianfei wang - Sun Microsystems - Beijing Chinaelif [ "$cmd" = "update" ]; then
651fa30e7bdSjianfei wang - Sun Microsystems - Beijing China	if [ "$MACH" = "i386" ]; then
6525a4c37c9Sqh201292	# In this case we always change the bootpath to phci-based
6535a4c37c9Sqh201292	# path first. bootpath will later be modified in mpxio-upgrade
6545a4c37c9Sqh201292	# to the vhci-based path if mpxio is enabled on root.
6555a4c37c9Sqh201292		get_newbootpath_for_stmsdev
6565a4c37c9Sqh201292		if [ $? -ne 0 ]; then
6575a4c37c9Sqh201292			gettext "failed to update bootpath.\n" 1>&2
6585a4c37c9Sqh201292			return 1
6595a4c37c9Sqh201292		fi
6605a4c37c9Sqh201292	fi
6617c478bd9Sstevel@tonic-gate	update_sysfiles
66260fffc19Sjw149990
663fa30e7bdSjianfei wang - Sun Microsystems - Beijing Chinaelif [ "$cmd" = "list" ]; then
66460fffc19Sjw149990		$STMSBOOTUTIL $GUID -l $controller
6657c478bd9Sstevel@tonic-gateelse
66660fffc19Sjw149990		$STMSBOOTUTIL $GUID -L
6677c478bd9Sstevel@tonic-gatefi
6687c478bd9Sstevel@tonic-gate
6697c478bd9Sstevel@tonic-gateexit $?
670