#!/bin/sh
# This will run all the network tests, with the status logged in /tmp/netpan.log

# ---***** THESE MUST BE SET FOR CORRECT OPERATION *****---
export RHOST=
export PASSWD=
# ---***************************************************---

cd `dirname $0`
export LTPROOT=${PWD}
echo $LTPROOT | grep testscripts > /dev/null 2>&1
if [ $? -eq 0 ]; then
 cd ..
 export LTPROOT=${PWD}
fi

export TMPDIR=/tmp/netpan-$$
mkdir -p $TMPDIR
CMDFILE=${TMPDIR}/network.tests
VERBOSE="no"

# For bitwise operation to determine which testsets run
CMD_IPV6=1		# 0x0001
CMD_IPV6_LIB=2		# 0x0002
CMD_MULTICAST=4		# 0x0004
CMD_NFS=8		# 0x0008
CMD_RPC=16		# 0x0010
CMD_SCTP=32		# 0x0020
CMD_TCPCMDS=64		# 0x0040
CMD_TCPCMDS_ADD=128	# 0x0080
CMD_WHOLE=65535		# 0xFFFF
CMD_DEFAULT=$(($CMD_MULTICAST|$CMD_NFS|$CMD_RPC|$CMD_TCPCMDS))

# ---***** NFS OPTIONAL SETTINGS *****---
# DEFAULTS
# export VERSION=2
# export SOCKET_TYPE=udp
# ---*********************************---

usage() {
    echo ""
    echo "---------------------------------------------------------"
    echo -e "\033[31m $0 [options] \033[0m "
    echo "---------------------------------------------------------"
    echo " -W|w: whole network tests"
    echo " -D|d: default network tests"
    echo " -6:   IPv6 tests"
    echo " -L|l: IPv6 library tests"
    echo " -M|m: multicast tests"
    echo " -N|n: nfs tests"
    echo " -R|r: rpc tests"
    echo " -S|s: sctp tests"
    echo " -T|t: TCP/IP command tests"
    echo " -V|v: Enable verbose"
    echo " -H|h: This Usage"
    echo "*) 'default' runs multicast, rpc, nfs and some of TCP/IP command"
    echo "   It is interpreted as 'default' if no test sets are specified"
    echo ""
}

# Parse options
CMD=0
while getopts WwDd6LlMmNnRrSsTtVvHh OPTION
do
    case $OPTION in
	W|w) CMD=$CMD_WHOLE;;
	D|d) CMD=$(($CMD|$CMD_DEFAULT));;
	6)   CMD=$(($CMD|$CMD_IPV6));;
	L|l) CMD=$(($CMD|$CMD_IPV6_LIB));;
	M|m) CMD=$(($CMD|$CMD_MULTICAST));;
	N|n) CMD=$(($CMD|$CMD_NFS));;
	R|r) CMD=$(($CMD|$CMD_RPC));;
	S|s) CMD=$(($CMD|$CMD_SCTP));;
	T|t) CMD=$(($CMD|$CMD_TCPCMDS|$CMD_TCPCMDS_ADD));;
	V|v) VERBOSE="yes";;
	H|h) usage; exit 0 ;;
	*) echo "Error: invalid option..."; usage; exit 1 ;;
    esac
done
if [ $CMD -eq 0 ]; then
    CMD=$CMD_DEFAULT
fi

# Determine which test set will run
rm -f $CMDFILE
if [ $(($CMD&$CMD_IPV6)) -ne 0 ]; then
    cat  ${LTPROOT}/runtest/ipv6 >> $CMDFILE
fi
if [ $(($CMD&$CMD_IPV6_LIB)) -ne 0 ]; then
    cat  ${LTPROOT}/runtest/ipv6_lib >> $CMDFILE
fi
if [ $(($CMD&$CMD_MULTICAST)) -ne 0 ]; then
    cat  ${LTPROOT}/runtest/multicast >> $CMDFILE
fi
if [ $(($CMD&$CMD_NFS)) -ne 0 ]; then
    cat  ${LTPROOT}/runtest/nfs >> $CMDFILE
fi
if [ $(($CMD&$CMD_RPC)) -ne 0 ]; then
    cat  ${LTPROOT}/runtest/rpc >> $CMDFILE
fi
if [ $(($CMD&$CMD_SCTP)) -ne 0 ]; then
    cat  ${LTPROOT}/runtest/sctp >> $CMDFILE
fi
if [ $(($CMD&$CMD_TCPCMDS)) -ne 0 ]; then
    cat  ${LTPROOT}/runtest/tcp_cmds >> $CMDFILE
fi
if [ $(($CMD&$CMD_TCPCMDS_ADD)) -ne 0 ]; then
    cat  ${LTPROOT}/runtest/tcp_cmds_addition >> $CMDFILE
fi

cd $TMPDIR

export PATH="${PATH}:${LTPROOT}/testcases/bin"

if [ ${VERBOSE} = "yes" ]; then
    echo "Network parameters:"
    echo " - Remote Host: ${RHOST}"

    cat $CMDFILE
    ${LTPROOT}/ver_linux
    echo ""
    echo ${LTPROOT}/bin/ltp-pan -e -l /tmp/netpan.log -S -a ltpnet -n ltpnet -f $CMDFILE
fi

${LTPROOT}/bin/ltp-pan -e -l /tmp/netpan.log -S -a ltpnet -n ltpnet -f $CMDFILE

if [ $? -eq "0" ]; then
  echo ltp-pan reported PASS
else
  echo ltp-pan reported FAIL
fi

rm -rf ${TMPDIR}
