xref: /titanic_53/usr/src/cmd/stmsboot/stmsboot.sh (revision ccb7005ef6977381a53a7d84158466fafd4e7870)
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