#! /bin/sh
#***********************************************************************
#
#   Copyright (c) International Business Machines  Corp., 2000
#
#   This program is free software;  you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation; either version 2 of the License, or
#   (at your option) any later version.
#
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY;  without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
#   the GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program;  if not, write to the Free Software
#   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
#
#
#  FILE   : ping
#
#  PURPOSE: To test the basic functionality of the `ping` command.
#  
#  SETUP: If "RHOST" is not exported, then the local hostname is used.
#
#  HISTORY:
#    06/06/03 Manoj Iyer manjo@mail.utexas.edu
#    - Modified testcase to use test APIs and also fixed minor bugs
#    03/01 Robbie Williamson (robbiew@us.ibm.com)
#      -Ported
#
#
#***********************************************************************

#-----------------------------------------------------------------------
#
# FUNCTION: do_setup
#
#-----------------------------------------------------------------------

do_setup()
{
    COUNT=${COUNT:-5}
    SLEEPTIME=${SLEEPTIME:-1}
    PACKETSIZES=${PACKETSIZES:-"8 16 32 64 128 256 512 1024 2048 4064"}

    tst_setup

    exists ping

    RHOST=${RHOST:-127.0.0.1}
}


#-----------------------------------------------------------------------
#
# FUNCTION:  do_test
# PURPOSE:   Executes the testcases.
#
#-----------------------------------------------------------------------

do_test() 
{
    tst_resm TINFO "ping with $PACKETSIZES ICMP packets"
    for packetsize in $PACKETSIZES; do
        tst_resm TINFO "calling ping with packet size = $packetsize"
        if ! ping -R -c $COUNT -s $packetsize $RHOST 2>&1 1>/dev/null; then
            end_testcase "failed: ping -c $COUNT -s $packetsize $RHOST"
        fi
        sleep $SLEEPTIME
    done
}

#*******************************************************************************
#
# FUNCTION:  MAIN
#
#*******************************************************************************
. net_cmdlib.sh

read_opts $*
do_setup
do_test
end_testcase
