#!/bin/ksh
#
#ident	"@(#)rcp.stf	1.8	04/12/15 SMI"
#
# Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
# This is the RCP NETWORK TEST MODULE
#########################################################################
# NOTES ON OPERATION AND ERROR HANDLING:
# This script is called by staf.eng, which is the main test harness.
# Standard output gets recorded in the test module log file by staf.eng.          
#
# Variable maxwarn is checked by staf.eng in the "chk_err()" monitoring process,               
# by grep'ing the log file of this test module.
# If maxwarn is exceeded, the staf.eng script will kill this test module.
# There are two formats for the error echos to the log files;
#
# 1.   echo "!ERROR: blah blah foo bar";
#      which will terminate the test.  If the test harness detects
#      a string match with "!ERROR", then all testing terminates.
#
# 2.   echo "!WARNING: blah blah foo bar";
#       The above format "!WARNING:" will make the log file entry,
#       but all testing will continue, no termination of tests,
#       UNLESS maxwarnings variable is exceeded.
#
# DANGER!!:  Even if you do not intend to use WARNING messages, variable
# maxwarn *MUST* be defined and the "maxwarnings=" line *MUST* be
# echo'ed to the logfile.  This syntax is mandatory.
#########################################################################

# variables
prgdir=../prgs                  # program directory
maxwarn=80			# max number of nonfatal warnings to tolerate.
remotemachine=			# Remote machine to run rcp
localmachine=
rhname=$1
localarg=
remotearg=
localdev=$2
remotedev=$3
localip=$4
remoteip=$5

#set up ppp link
psid=`ps -ef | grep pppd | grep "$localip" | grep -v grep `
if [ -z "$psid" ]
then 
	localarg="$localdev $localip:$remoteip"
	pppd nodeflate $localarg &
        if [ $? -ne 0 ]
        then
                echo "Local pppd was not started correctly."
        fi
fi

psid=`rsh -l root $rhname ps -ef | grep pppd | grep "$remoteip" | grep -v grep `
if [ -z "$psid" ]
then 
	remotearg="$remotedev $remoteip:$localip"
	rsh -l root $rhname pppd nodeflate $remotearg &
	if [ $? -ne 0 ]
        then
                echo "Remote pppd was not started correctly."
        fi
fi

# functions

clean_up()
{
	echo "RCP ending!"
	kill -17 $rcpid
}

### MAIN ###

# Trap signals
trap 'clean_up; exit' 17

# Check args
#if [ $# -ne 1 ]
if [ $# -ne 5 ]
then
	echo "!ERROR: $0 <remote_host>"
	echo "!ERROR: $0 called with bad arguments."
	exit 1
fi

# SET LOGFILE FLAG FOR MAX WARNING COUNT
# This is checked by staf.eng, and if exceeded, staf.eng will kill this module.
echo "maxwarnings=${maxwarn}"

#rcp/bin/rcp.sh $remotemachine &
rcp/bin/rcp.sh $remoteip &

rcpid=$!

wait $rcpid

#kill ppp link
pspppd=`ps -ef | grep pppd | grep -v grep | grep "$localip"| awk '{print $2}'`
if [ -n $pspppd ]
then
	echo "get pspppd $pspppd sucessfully" >> /tmp/errors
	kill -9 $pspppd
        if [ $? -ne 0 ]
        then
                echo "Local pppd was not killed correctly."
        fi
fi

repspppd=`rsh -l root $rhname ps -ef | grep pppd | grep -v grep | grep "$remoteip" | awk '{print $2}'`
if [ -n $repspppd ]
then
	echo "get repspppd $repspppd sucessfully" >> /tmp/errors
	rsh -l root $rhname kill -9 $repspppd &
        if [ $? -ne 0 ]
        then
                echo "Remote pppd was not killed correctly."
        fi
fi
