blob: 0b97470c0882962815b7bb5b38965d5181751f32 [file] [log] [blame]
#! /bin/sh
################################################################################
## ##
## Copyright (c) International Business Machines Corp., 2001 ##
## ##
## 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 : ip_tests.sh
#
# Description: Test basic functionality of ip command in route2 package
#
# Author: Manoj Iyer, manjo@mail.utexas.edu
#
# History: Feb 19 2003 - Created - Manoj Iyer.
# Feb 26 2003 - Added - test05, test06
# - Commands mroute, tunnel, monitor and rtmon are
# not covered by this testcase.
#
set +x
# Function: init
#
# Description: - Check if command ip is available.
# - Check if command ifconfig is available.
# - check if command awk is available.
# - alias eth0 to eth0:1 with IP 10.1.1.12
#
# Return - zero on success
# - non zero on failure. return value from commands ($RC)
init()
{
export RC=0 # Return code from commands.
export TST_TOTAL=2 # total numner of tests in this file.
export TCID="ip_tests " # this is the init function.
export TST_COUNT=0 # init identifier,
if [ -z $TMP ]
then
LTPTMP=/tmp/tst_ip.$$/
else
LTPTMP=$TMP/tst_ip.$$/
fi
# Initialize cleanup function.
trap "cleanup" 0
# create the tmp directory for this testcase.
mkdir -p $LTPTMP/ >/dev/null 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_brkm TBROK "INIT: Unable to create temporary directory"
return $RC
fi
# Check to see if test harness functions are in the path.
which tst_resm >$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_brkm TBROK NULL \
"INIT: USCTEST commands not found, set PATH correctly."
return $RC
fi
which awk >$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_brkm TBROK NULL \
"INIT: command awk not found. Exiting test."
return $RC
fi
which ip >$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_brkm TBROK NULL \
"INIT: command ip not found. Exiting test."
return $RC
fi
which ifconfig >$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_brkm TBROK NULL \
"INIT: command awk not found. Exiting test."
return $RC
fi
tst_resm TINFO "INIT: Inititalizing tests."
# Aliasing eth0 to create private network.
/sbin/ifconfig eth0:1 10.1.1.12 >$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_brk TBROK "INIT: failed aliasing eth0:1 with IP 10.1.1.12"
return $RC
else
/sbin/route add -host 10.1.1.12 dev eth0:1 >$LTPTMP/tst_ip.err 2>&1 \
|| RC=$?
if [ $RC -ne 0 ]
then
tst_brk TBROK "INIT: failed adding route to 10.1.1.12"
return $RC
else
tst_resm TINFO "INIT: added alias: `ifconfig eth0:1`"
fi
fi
cat > $LTPTMP/tst_ip02.exp <<-EOF || RC=$?
1:
link/loopback
2:
link/ether
3:
link/ether
EOF
if [ $RC -ne 0 ]
then
tst_brkm TBROK NULL "INIT: failed creating expected output for test02"
return $RC
fi
return $RC
}
# Function: cleanup
#
# Description - remove temporary files and directories.
# - remove alias to eth0
#
# Return - zero on success
# - non zero on failure. return value from commands ($RC)
cleanup()
{
TCID=dhcpd
TST_COUNT=0
RC=0
/sbin/ifconfig eth0:1 >$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -eq 0 ]
then
/sbin/ifconfig eth0:1 down >$LTPTMP/tst_ip.err 2>&1
fi
rm -fr $LTPTMP
return $RC
}
# Function: test01
#
# Description - Test basic functionality of ip command
# - Test #1: ip link set DEVICE mtu MTU changes the device mtu
# size.
# - execute the command and create output.
# - create expected output
# - compare expected output with actual output.
#
# Return - zero on success
# - non zero on failure. return value from commands ($RC)
test01()
{
RC=0 # Return value from commands.
TCID=ip01 # Name of the test case.
TST_COUNT=1 # Test number.
tst_resm TINFO \
"Test #1: ip link set DEVICE mtu MTU changes the device mtu size"
tst_resm TINFO "Test #1: changing mtu size of eth0:1 device."
ip link set eth0:1 mtu 300 >$LTPTMP/tst_ip.err 2>&1
if [ $RC -ne 0 ]
then
tst_res TFAIL $LTPTMP/tst_ip.err \
"Test #1: ip command failed. Reason: "
return $RC
else
MTUSZ=`ifconfig eth0:1 | grep -i MTU | sed "s/^.*MTU://" | awk '{print $1}'`
if [ $MTUSZ -eq 300 ]
then
tst_resm TPASS "Test #1: changing mtu size success"
else
tst_resm FAIL NULL \
"Test #1: MTU value not set to 300: ifconfig returned: $MTUSZ"
return $RC
fi
fi
return $RC
}
# Function: test02
#
# Description - Test basic functionality of ip command
# - Test #2: ip link show lists device attributes.
# - execute the command and create output.
# - create expected output
# - compare expected output with actual output.
#
# Return - zero on success
# - non zero on failure. return value from commands ($RC)
test02()
{
RC=0 # Return value from commands.
TCID=ip02 # Name of the test case.
TST_COUNT=2 # Test number.
tst_resm TINFO \
"Test #2: ip link show lists device attributes."
tst_resm TINFO \
"Test #2: Installing dummy.o in kernel"
modprobe dummy >$LTPTMP/tst_ip.out 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_brk TBROK $LTPTMP/tst_ip.out NULL \
"Test #2: modprobe failed to load dummy.o"
return $RC
fi
ip link show dummy0 | grep dummy0 >$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_res TFAIL $LTPTMP/tst_ip.err "Test #2: ip command failed. Reason:"
return $RC
else
tst_resm TPASS \
"Test #2: Listed eth0:1 and returned correct attributes"
fi
return $RC
}
# Function: test03
#
# Description - Test basic functionality of ip command
# - Test #3: ip addr add <ip address> dev <device> will add new
# protocol address.
# - Test #3: ip addr del <ip address> dev <device> will del new
# protocol address.
# - Test #3: ip addr show dev <device> will how interface
# attributes.
# - execute the command and create output.
# - create expected output
# - compare expected output with actual output.
#
# Return - zero on success
# - non zero on failure. return value from commands ($RC)
test03()
{
RC=0 # Return value from commands.
TCID=ip03 # Name of the test case.
TST_COUNT=3 # Test number.
tst_resm TINFO \
"Test #3: ip addr add - adds a new protolcol address to the device"
ip addr add 127.6.6.6 dev lo >$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_res TFAIL $LTPTMP/tst_ip.err \
"Test #3: ip addr add command failed. Reason:"
return $RC
else
tst_resm TINFO \
"Test #3: ip addr show dev <device> - shows protocol address."
ip addr show dev lo | grep 127.6.6.6 >$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_res TFAIL $LTPTMP/tst_ip.err \
"Test #3: ip addr show dev: command failed. Reason:"
return $RC
fi
tst_resm TINFO \
"Test #3: ip addr del <ip> dev <device> - deletes protocol address."
ip addr del 127.6.6.6 dev lo >$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_res TFAIL $LTPTMP/tst_ip.err \
"Test #3: ip addr del command failed. Reason: "
return $RC
else
ip addr show dev lo | grep 127.6.6.6 >$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -eq 0 ]
then
tst_res TFAIL $LTPTMP/tst_ip.err \
"Test #3: ip addr del command failed. Reason: "
return $(($RC+1))
else
RC=0
fi
tst_resm TPASS \
"Test #3: ip addr command tests successful"
fi
fi
return $RC
}
# Function: test04
#
# Description - Test basic functionality of ip command
# - Test #4: ip neigh add - add new neighbour entry to arp table
# - Test #4: ip neigh show - show neighbour entry to arp table
# - Test #4: ip neigh delete - delete new neighbour entry to arp
# table
# - execute the command and create output.
# - create expected output
# - compare expected output with actual output.
#
# Return - zero on success
# - non zero on failure. return value from commands ($RC)
test04()
{
RC=0 # Return value from commands.
TCID=ip04 # Name of the test case.
TST_COUNT=4 # Test number.
tst_resm TINFO \
"Test #4: ip neigh add - adds a new neighbour to arp tables."
ip neigh add 127.0.0.1 dev lo nud reachable >$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_res TFAIL $LTPTMP/tst_ip.err \
"Test #4: ip neigh add command failed. Reason:"
return $RC
else
tst_resm TINFO \
"Test #4: ip neigh show - shows all neighbour entries in arp tables."
cat > $LTPTMP/tst_ip.exp <<-EOF
127.0.0.1 dev lo lladdr 00:00:00:00:00:00 REACHABLE
EOF
ip neigh show 127.0.0.1 | head -n1 >$LTPTMP/tst_ip.out 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_res TFAIL $LTPTMP/tst_ip.err \
"Test #4: ip addr show dev: command failed. Reason:"
return $RC
else
diff -iwB $LTPTMP/tst_ip.out $LTPTMP/tst_ip.exp \
>$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_res FAIL $LTPTMP/tst_ip.err \
"Test #4: expected out differs from actual output. Reason:"
return $RC
fi
fi
tst_resm TINFO \
"Test #4: ip neigh del - deletes neighbour from the arp table."
ip neigh del 127.0.0.1 dev lo >$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_res TFAIL $LTPTMP/tst_ip.err \
"Test #4: ip neigh del command failed return = $RC. Reason: "
return $RC
else
ip neigh show | grep 127.0.0.1 | grep -v " FAILED$" >$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -eq 0 ]
then
tst_res TFAIL $LTPTMP/tst_ip.err \
"Test #4: 127.0.0.1 still listed in arp. ip cmd Error Message:"
return $(($RC+1))
else
RC=0
fi
fi
tst_resm TPASS \
"Test #4: ip neigh command tests successful"
fi
return $RC
}
# Function: test05
#
# Description - Test basic functionality of ip command
# - Test #5: ip route add - add new route entry to route table
# - Test #5: ip route show - show route entry to route table
# - Test #5: ip route delete - delete route entry to route table
# - execute the command and create output.
# - create expected output
# - compare expected output with actual output.
#
# Return - zero on success
# - non zero on failure. return value from commands ($RC)
test05()
{
RC=0 # Return value from commands.
TCID=ip05 # Name of the test case.
TST_COUNT=5 # Test number.
tst_resm TINFO \
"Test #5: ip route add - adds a new route to route tables."
tst_resm TINFO \
"Test #5: create an interface with inet 10.6.6.6 alias to eth0"
ifconfig eth0:1 10.6.6.6 netmask 255.255.255.0 >$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_brk TBROK $LTPTMP/tst_ip.err NULL \
"Test #5: unable to create interface eth0:1 inet 10.6.6.6. Reason:"
return $RC
fi
ip route add 10.6.6.6 via 127.0.0.1 >$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_res TFAIL $LTPTMP/tst_ip.err \
"Test #5: ip route add command failed. Reason:"
return $RC
else
tst_resm TINFO \
"Test #5: ip route show - shows all route entries in route tables."
# create expected output file.
cat > $LTPTMP/tst_ip.exp <<-EOF
10.6.6.6 via 127.0.0.1 dev lo
EOF
ip route show | head -n1 >$LTPTMP/tst_ip.out 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_res TFAIL $LTPTMP/tst_ip.err \
"Test #5: ip route show command failed. Reason:"
return $RC
else
diff -iwB $LTPTMP/tst_ip.out $LTPTMP/tst_ip.exp \
>$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_res FAIL $LTPTMP/tst_ip.err \
"Test #5: ip route show did not list new route. Details:"
return $RC
fi
fi
tst_resm TINFO \
"Test #5: ip route del - deletes route from the route table."
ip route del 10.6.6.6 via 127.0.0.1 >$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_res TFAIL $LTPTMP/tst_ip.err \
"Test #5: ip route del command failed return = $RC. Reason: "
return $RC
else
ip route show | grep 127.0.0.1 >$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -eq 0 ]
then
tst_res TFAIL $LTPTMP/tst_ip.err \
"Test #5: route not deleted. ip route show:"
return $(($RC+1))
else
RC=0
fi
fi
tst_resm TPASS \
"Test #5: ip route command tests successful"
fi
return $RC
}
# Function: test06
#
# Description - Test basic functionality of ip command
# - Test #6: ip maddr add - add new multicast addr entry
# - Test #6: ip maddr show - show multicast addr entry
# - Test #6: ip maddr delete - delete new multicast addr entry
# - execute the command and create output.
# - create expected output
# - compare expected output with actual output.
#
# Return - zero on success
# - non zero on failure. return value from commands ($RC)
test06()
{
RC=0 # Return value from commands.
TCID=ip06 # Name of the test case.
TST_COUNT=6 # Test number.
tst_resm TINFO \
"Test #6: ip maddr add - adds a new multicast addr"
ifconfig eth0:1 10.6.6.6 netmask 255.255.255.0 >$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_brk TBROK $LTPTMP/tst_ip.err NULL \
"Test #6: unable to create interface eth0:1 inet 10.6.6.6. Reason:"
return $RC
fi
ip maddr add 66:66:00:00:00:66 dev eth0:1 >$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_res TFAIL $LTPTMP/tst_ip.err \
"Test #6: ip maddr add command failed. Reason:"
return $RC
else
tst_resm TINFO \
"Test #6: ip maddr show - shows all multicast addr entries."
cat > $LTPTMP/tst_ip.exp <<-EOF
link 66:66:00:00:00:66 static
EOF
ip maddr show | grep "66:66:00:00:00:66" >$LTPTMP/tst_ip.out 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_res TFAIL $LTPTMP/tst_ip.err \
"Test #6: ip maddr show dev: command failed. Reason:"
return $RC
else
diff -iwB $LTPTMP/tst_ip.out $LTPTMP/tst_ip.exp \
&>$LTPTMP/tst_ip.err || RC=$?
if [ $RC -ne 0 ]
then
tst_res FAIL $LTPTMP/tst_ip.err \
"Test #6: multicast addr not added to eth0:1. Details:"
return $RC
fi
fi
tst_resm TINFO \
"Test #6: ip maddr del - deletes multicast addr."
ip maddr del 66:66:00:00:00:66 dev eth0:1 >$LTPTMP/tst_ip.err 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
tst_res TFAIL $LTPTMP/tst_ip.err \
"Test #6: ip maddr del command failed return = $RC. Reason: "
return $RC
else
ip maddr show | grep "66:66:00:00:00:66" &>$LTPTMP/tst_ip.err \
|| RC=$?
if [ $RC -eq 0 ]
then
tst_res TFAIL $LTPTMP/tst_ip.err \
"Test #6: 66:66:00:00:00:66 is not deleted. Details:"
return $(($RC+1))
else
RC=0
fi
fi
tst_resm TPASS \
"Test #6: ip maddr command tests successful"
fi
return $RC
}
# Function: main
#
# Description: - Execute all tests, report results.
#
# Exit: - zero on success
# - non-zero on failure.
TFAILCNT=0 # Set TFAILCNT to 0, increment on failure.
RC=0 # Return code from test.
init || exit $RC
test01 || RC=$?
test02 || RC=$?
test03 || RC=$?
test04 || RC=$?
test05 || RC=$?
test06 || RC=$?
exit $RC