#!/bin/ksh
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
# onc720 src/oncplus/etc/rc.nfs.sh 1.25 
#  
# Licensed Materials - Property of IBM 
#  
# COPYRIGHT International Business Machines Corp. 1996,2007 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 

umask 002

DSPMSG=/usr/bin/dspmsg
MSGCAT=tuno.cat
MSGSET=2
LOGFILE=/etc/tunables/lastboot.log
TUNCHANGE=/usr/sbin/tunchange

#
# start() has the following logic
# 1) if srcmstr is running, use it to start the daemon
# 2) if srcmstr is NOT running, lookup the daemon path and arguments from
# srcmstr's config database in odm (SRCsubsys).
# 3) if the config info can not be found, attempt to start the daemon
# from the default parameters passed into start().
#
start()
{

daemon=$1 					    # Subsystem name
default_path=$2					    # full path w/ cmdname
shift;shift
default_arg=$*					    # default arguments

#
# get the path to the daemon from the SRC ODM config info
#
daemon_path=`odmget -q subsysname=$daemon SRCsubsys 2>/dev/null | \
      awk ' $1 == "path" { print $NF }' 2>/dev/null | sed 's/"//g' `

#
# if daemon_path not set (length zero) then try synonymname
#
if [ -z "$daemon_path" ] ; then 	
	daemon_path=`odmget -q synonym=$daemon SRCsubsys 2>/dev/null | \
      		awk ' $1 == "path" { print $NF }' 2>/dev/null | sed 's/"//g' `
fi

#
# get the arguments to the daemon from the SRC ODM config info
#
cmdargs=`odmget -q subsysname=$daemon SRCsubsys 2>/dev/null | grep cmdargs | sed 's/[[:space:]]*cmdargs[[:space:]]*=[[:space:]]*//' | sed 's/"\(.*\)"/\1/'`

if [ -n "$src_running" -a -n "$daemon_path" ] ; then 	
	#
	#if srcmstr is running and there is an entry in SRCsubsys - use src
	#
	if [ -n "$src_dynamic" -a "$daemon" != "ypbind" ] ; then
		startsrc -s $daemon &
	else
		startsrc -s $daemon 
	fi
else					#if srcmstr not running, start manually
	if [ -n "$src_dynamic" ] ; then
		wait
		src_dynamic=""
	fi
	if [ -n "$daemon_path" ] ; then
		if [ -n "$cmdargs" ] ; then
			$daemon_path $cmdargs  &		# issue cmd
		else
			$daemon_path $default_arg  & 	# issue cmd
		fi
	else
		$default_path $default_arg &  		#issue cmd
	fi
	
fi

} 	# end start()

# By default, start() will start NFS deamons in background.
src_dynamic=1

#
# determine of srcmstr is running 
#
if [ -n "`ps -e | awk '$NF == "srcmstr" {print $1} '`" ] ; then
       src_running=1
else 
       src_running=""
fi



# Uncomment the following lines  and change the domain
# name to define your domain (domain must be defined
# before starting NIS).
#if [ -x /usr/bin/domainname ]; then
#	/usr/bin/domainname ibm
#fi

#
# Clear all servers' rmtab files in case we went down abnormally.
#
if [ -s /sbin/helpers/nfsmnthelp ]; then
	/sbin/helpers/nfsmnthelp B 0
fi

#dspmsg cmdnfs.cat -s 8 2 "starting NIS services:\n"
#trap 'dspmsg cmdnfs.cat -s 8 4 "Completed NIS services.\n"' 0
#if [ -x /usr/lib/netsvc/yp/ypserv -a -d /var/yp/`domainname` ]; then
#	start ypserv /usr/lib/netsvc/yp/ypserv
#fi

#if [ -x /usr/lib/netsvc/yp/ypbind ]; then
#	start ypbind /usr/lib/netsvc/yp/ypbind
#fi

#if [ -x /usr/sbin/keyserv ]; then
#	start keyserv /usr/sbin/keyserv
#fi

#if [ -x /usr/lib/netsvc/yp/rpc.ypupdated -a -d /var/yp/`domainname` ]; then
#	start ypupdated /usr/lib/netsvc/yp/rpc.ypupdated
#fi

dspmsg cmdnfs.cat -s 8 1 "Starting NFS services:\n"
trap 'dspmsg cmdnfs.cat -s 8 3 "Completed NFS services.\n"' 0
if [ -x /usr/sbin/biod ]; then
	start biod /usr/sbin/biod
fi

#
# If we are a Thin Server with NFSv4 filesystems, nfsrgyd has been
# started at the very beginning of phase 3 in rc.boot.
# In this case, no need to restart it.
# Begin nfsrgyd startup
if [ -s /usr/sbin/nfsrgyd -a -f /etc/nfs/local_domain ]; then
	nfsrgyd_pid=`ps -e | awk '$NF == "nfsrgyd" {print $1}'`

# if [ -x /usr/sbin/gssd ] ; then
#     start gssd /usr/sbin/gssd
# fi

	[ -z "$nfsrgyd_pid" ] && start nfsrgyd /usr/sbin/nfsrgyd
fi
# End nfsrgyd startup

#
# mount the proxy mount here because this could be a proxy server
nfs_mount=`grep -p "=[[:blank:]]*proxyfs" /etc/filesystems | grep -p nodename | grep mount | grep -c true`
if [ "$nfs_mount" -ne "0" ]; then
	sleep 5
	/usr/sbin/mount -t proxyfs
fi
# End proxy startup

#
# If nfs daemon is executable and /etc/exports, become nfs server.
#
nfsd_running=0
if /usr/bin/ps -eo comm | /usr/bin/grep -w nfsd > /dev/null ; then
    nfsd_running=1
fi

mountd_running=0
if /usr/bin/ps -eo comm | /usr/bin/grep -w rpc.mountd > /dev/null ; then
    mountd_running=1
fi

# Unexport only if the nfsd and mountd daemons are not active
if [ $nfsd_running -eq 0 ] && [ $mountd_running -eq 0 ] ; then
    /usr/sbin/exportfs -ua
fi

if [ -x /usr/sbin/nfsd -a -f /etc/exports ]; then
	/usr/sbin/exportfs -a
	start nfsd /usr/sbin/nfsd
	start rpc.mountd /usr/sbin/rpc.mountd
fi

#
# Get boot tunable values for lockd and statd
#

LOCKD_DEBUG_LEVEL=`nfso -x lockd_debug_level 2>/dev/null | awk '{FS=",";print $4}'`
STATD_DEBUG_LEVEL=`nfso -x statd_debug_level 2>/dev/null | awk '{FS=",";print $4}'`
STATD_MAX_THREADS=`nfso -x statd_max_threads 2>/dev/null | awk '{FS=",";print $4}'`
LOCKD_DEBUG_LEVEL_D=`nfso -x lockd_debug_level 2>/dev/null | awk '{FS=",";print $3}'`
STATD_DEBUG_LEVEL_D=`nfso -x statd_debug_level 2>/dev/null | awk '{FS=",";print $3}'`
STATD_MAX_THREADS_D=`nfso -x statd_max_threads 2>/dev/null | awk '{FS=",";print $3}'`

if [ $LOCKD_DEBUG_LEVEL ]; then
    /usr/sbin/nfso -C -r -o lockd_debug_level=$LOCKD_DEBUG_LEVEL > /dev/null 2>>$LOGFILE
    if [ $? -eq 0 ]; then
      if [ $PPID -eq 1 ]; then
        if [ $LOCKD_DEBUG_LEVEL -ne $LOCKD_DEBUG_LEVEL_D ]; then
	    $DSPMSG -s $MSGSET $MSGCAT \
		22 'Setting %1$s to %2$s\n' \
		lockd_debug_level $LOCKD_DEBUG_LEVEL \
		>> $LOGFILE

	fi
	$TUNCHANGE -f lastboot -t nfso -o lockd_debug_level=$LOCKD_DEBUG_LEVEL
	NEWARGS=`odmget -q subsysname=rpc.lockd SRCsubsys 2>/dev/null | grep cmdargs | sed 's/[[:space:]]*cmdargs[[:space:]]*=[[:space:]]*//' | sed "s/-d[[:space:]]*[[:digit:]]*/-d $LOCKD_DEBUG_LEVEL/g" |  sed 's/"\(.*\)"/\1/'`
	echo $NEWARGS | grep -q -- -d > /dev/null
	if [ $? -eq 0 ]; then
	    FIXARGS=`echo $NEWARGS`
	else
	    FIXARGS=`echo -d $LOCKD_DEBUG_LEVEL $NEWARGS`
	fi
	chssys -s rpc.lockd -a "$FIXARGS" > /dev/null 2>&1
      fi
    else
	LOCKD_DEBUG_LEVEL="NONE"
    fi
else
    LOCKD_DEBUG_LEVEL="NONE"
fi

if [ $STATD_DEBUG_LEVEL ]; then
    /usr/sbin/nfso -C -r -o statd_debug_level=$STATD_DEBUG_LEVEL > /dev/null 2>>$LOGFILE
    if [ $? -eq 0 ]; then
      if [ $PPID -eq 1 ]; then
        if [ $STATD_DEBUG_LEVEL -ne $STATD_DEBUG_LEVEL_D ]; then
	    $DSPMSG -s $MSGSET $MSGCAT \
		22 'Setting %1$s to %2$s\n' \
		statd_debug_level $STATD_DEBUG_LEVEL \
		>> $LOGFILE

	fi
	$TUNCHANGE -f lastboot -t nfso -o statd_debug_level=$STATD_DEBUG_LEVEL
	NEWARGS=`odmget -q subsysname=rpc.statd SRCsubsys 2>/dev/null | grep cmdargs | sed 's/[[:space:]]*cmdargs[[:space:]]*=[[:space:]]*//' | sed "s/-d[[:space:]]*[[:digit:]]*/-d $STATD_DEBUG_LEVEL/g" | sed 's/"\(.*\)"/\1/'`
	echo $NEWARGS | grep -q -- -d > /dev/null
	if [ $? -eq 0 ]; then
	    FIXARGS=`echo $NEWARGS`
	else
	    FIXARGS=`echo $NEWARGS -d $STATD_DEBUG_LEVEL`
	fi
	chssys -s rpc.statd -a "$FIXARGS" > /dev/null 2>&1
      fi
    else
	STATD_DEBUG_LEVEL="NONE"
    fi
else
    STATD_DEBUG_LEVEL="NONE"
fi

if [ $STATD_MAX_THREADS ]; then
    /usr/sbin/nfso -C -r -o statd_max_threads=$STATD_MAX_THREADS > /dev/null 2>>$LOGFILE
    if [ $? -eq 0 ]; then
      if [ $PPID -eq 1 ]; then
        if [ $STATD_MAX_THREADS -ne $STATD_MAX_THREADS_D ]; then
	    $DSPMSG -s $MSGSET $MSGCAT \
		22 'Setting %1$s to %2$s\n' \
		statd_max_threads $STATD_MAX_THREADS \
		>> $LOGFILE

	fi
	$TUNCHANGE -f lastboot -t nfso -o statd_max_threads=$STATD_MAX_THREADS
	NEWARGS=`odmget -q subsysname=rpc.statd SRCsubsys 2>/dev/null | grep cmdargs | sed 's/[[:space:]]*cmdargs[[:space:]]*=[[:space:]]*//' | sed "s/-t[[:space:]]*[[:digit:]]*/-t $STATD_MAX_THREADS/g" | sed 's/"\(.*\)"/\1/'`
	echo $NEWARGS | grep -q -- -t > /dev/null
	if [ $? -eq 0 ]; then
	    FIXARGS=`echo $NEWARGS`
	else
	    FIXARGS=`echo $NEWARGS -t $STATD_MAX_THREADS`
	fi
	chssys -s rpc.statd -a "$FIXARGS" > /dev/null 2>&1
      fi
    else
	STATD_MAX_THREADS="NONE"
    fi
else
    STATD_MAX_THREADS="NONE"
fi

#
# start up status monitor and locking daemon if present
#
if [ -x /usr/sbin/rpc.statd ]; then
	# Do not start rpc.statd if TCP/IP is not configured
	if [ "`/usr/sbin/ifconfig -l`" != "lo0" ]; then
	    if [ $STATD_DEBUG_LEVEL != "NONE" ]; then
	        if [ $STATD_MAX_THREADS != "NONE" ]; then
		    start rpc.statd /usr/sbin/rpc.statd -d $STATD_DEBUG_LEVEL -t $STATD_MAX_THREADS
		else
		    start rpc.statd /usr/sbin/rpc.statd -d $STATD_DEBUG_LEVEL
		fi
	    else
	        if [ $STATD_MAX_THREADS != "NONE" ]; then
		    start rpc.statd /usr/sbin/rpc.statd -t $STATD_MAX_THREADS
		else
		    start rpc.statd /usr/sbin/rpc.statd
		fi
	    fi
	fi
fi

if [ -x /usr/sbin/rpc.lockd ]; then
	if [ $LOCKD_DEBUG_LEVEL != "NONE" ]; then
	    start rpc.lockd /usr/sbin/rpc.lockd -d $LOCKD_DEBUG_LEVEL
        else
		start rpc.lockd /usr/sbin/rpc.lockd
        fi
fi

#
#Uncomment the following lines to start up the NIS 
#yppasswd daemon.
#DIR=/etc
#if [ -x /usr/lib/netsvc/yp/rpc.yppasswdd -a -f $DIR/passwd ]; then
#	start rpc.yppasswdd /usr/lib/netsvc/yp/rpc.yppasswdd /etc/passwd -m
#fi

#if [ -x /usr/sbin/nis_cachemgr ]; then
#	start nis_cachemgr /usr/sbin/nis_cachemgr
#fi

#if [ -x /usr/sbin/rpc.nisd ]; then
#	start rpc.nisd /usr/sbin/rpc.nisd
#fi

#if [ -x /usr/sbin/rpc.nispasswdd ]; then
#	start rpc.nispasswdd /usr/sbin/rpc.nispasswdd
#fi

# Wait until all child processes started successfully if NFS deamons
# were started in background.
if [ -n "$src_dynamic" ] ; then
        wait
fi

nfs_mount=`grep -p "=[[:blank:]]*nfs" /etc/filesystems | grep -p nodename | grep mount | grep -c true`
if [ "$nfs_mount" -ne "0" ]
then
	/usr/sbin/mount -v nfs all
fi

# make sure to mount the cachefs filesystem only. not proxyfs
nfs_mount=`grep -p "=[[:blank:]]*cachefs" /etc/filesystems | grep -v -p proxyfs | grep -p nodename | grep mount | grep -c true`
if [ "$nfs_mount" -ne "0" ]
then
	/usr/sbin/mount -v cachefs all
fi
## Begin AutoFS startup   ## Do NOT remove
##
if [ -s /etc/auto_master ]; then 
	/usr/sbin/automount
fi
##
## End AutoFS startup   ## Do NOT remove
