#! /bin/sh
# Copyright (c) 2014-2016 Oracle and/or its affiliates. All Rights Reserved.
# 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 would 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 the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# Description: Test basic functionality of ip command in route2 package
#
# Author: Manoj Iyer, manjo@mail.utexas.edu
TST_CLEANUP=cleanup
TST_TOTAL=6
TCID="ip_tests"
TST_USE_LEGACY_API=1
. tst_net.sh
rm_dummy=
init()
{
tst_resm TINFO "inititalizing tests"
tst_require_root
tst_tmpdir
tst_test_cmds cat awk diff
iface=ltp_dummy
lsmod | grep -q dummy || rm_dummy=1
ROD ip li add $iface type dummy
ip4_addr=${IPV4_NET16_UNUSED}.6.6
ROD ip a add ${ip4_addr}/24 dev $iface
cat > tst_ip02.exp <<-EOF
1:
link/loopback
2:
link/ether
3:
link/ether
EOF
if [ $? -ne 0 ]; then
tst_brkm TBROK "can't create expected output for test02"
fi
}
cleanup()
{
tst_rmdir
[ -n "$iface" -a -d /sys/class/net/$iface ] && ip li del $iface
[ "$rm_dummy" ] && modprobe -r dummy
# test #5
ip route show | grep $ip4_addr && ip route del $ip4_addr
}
test01()
{
tst_resm TINFO "test 'ip link set' command"
tst_resm TINFO "changing mtu size of $iface device"
MTUSZ_BAK=$(cat /sys/class/net/${iface}/mtu)
ip link set ${iface} mtu 1281
if [ $? -ne 0 ]; then
tst_resm TFAIL "ip command failed"
return
fi
MTUSZ=$(cat /sys/class/net/${iface}/mtu)
if [ $MTUSZ -eq 1281 ]; then
tst_resm TPASS "successfully changed mtu size"
ip link set $iface mtu $MTUSZ_BAK
else
tst_resm TFAIL "MTU value set to $MTUSZ, but expected 1281"
fi
}
test02()
{
tst_resm TINFO "test 'ip link show' command (list device attributes)"
ip link show $iface | grep $iface > /dev/null
if [ $? -ne 0 ]; then
tst_resm TFAIL "'ip link show $iface' command failed"
return
fi
tst_resm TPASS "$iface correctly listed"
}
test03()
{
tst_resm TINFO "test 'ip addr' command with loopback dev"
tst_resm TINFO "add a new protocol address to the device"
ip addr add 127.6.6.6/24 dev lo
if [ $? -ne 0 ]; then
tst_resm TFAIL "'ip addr add' command failed"
return
fi
tst_resm TINFO "show protocol address"
ip addr show dev lo | grep 127.6.6.6 > /dev/null
if [ $? -ne 0 ]; then
tst_resm TFAIL "'ip addr show' command failed"
return
fi
tst_resm TINFO "delete protocol address"
ip addr del 127.6.6.6/24 dev lo
if [ $? -ne 0 ]; then
tst_resm TFAIL "'ip addr del' command failed"
return
fi
ip addr show dev lo | grep 127.6.6.6 > /dev/null
if [ $? -eq 0 ]; then
tst_resm TFAIL "ip addr del command failed"
return
fi
tst_resm TPASS "'ip addr' command successfully tested"
}
test04()
{
local taddr="$(tst_ipaddr_un)"
local tdev="$(tst_iface)"
tst_resm TINFO "test 'ip neigh' command"
tst_resm TINFO "add a new neighbor (or replace existed)"
ip neigh replace $taddr lladdr 00:00:00:00:00:00 dev $tdev nud reachable
if [ $? -ne 0 ]; then
tst_resm TFAIL "'ip neigh replace' command failed"
return
fi
tst_resm TINFO "show all neighbor entries in arp tables"
echo "$taddr dev $tdev lladdr 00:00:00:00:00:00 REACHABLE" > tst_ip.exp
ip neigh show $taddr | head -n1 > tst_ip.out 2>&1
if [ $? -ne 0 ]; then
tst_resm TFAIL "'ip neigh show' command failed"
return
fi
diff -iwB tst_ip.out tst_ip.exp
if [ $? -ne 0 ]; then
tst_resm TFAIL "expected output differs from actual output"
return
fi
tst_resm TINFO "delete neighbor from the arp table"
ip neigh del $taddr dev $tdev
if [ $? -ne 0 ]; then
tst_resm TFAIL "'ip neigh del' command failed"
return
fi
ip neigh show | grep $taddr | grep -v ' FAILED$' > /dev/null
if [ $? -eq 0 ]; then
tst_resm TFAIL "$taddr still listed in arp"
return
fi
tst_resm TPASS "'ip neigh' command successfully tested"
}
test05()
{
tst_resm TINFO "test 'ip route add/del' commands"
ROD ip route add $ip4_addr via 127.0.0.1
tst_resm TINFO "show all route entries in route table"
# create expected output file.
cat > tst_ip.exp <<-EOF
$ip4_addr via 127.0.0.1 dev lo
EOF
ip route show | grep "$ip4_addr via 127.0.0.1 dev lo" > tst_ip.out 2>&1
if [ $? -ne 0 ]; then
tst_resm TFAIL "'ip route show' command failed"
return
fi
diff -iwB tst_ip.out tst_ip.exp
if [ $? -ne 0 ]; then
tst_resm TFAIL "'ip route show' did not list new route"
return
fi
tst_resm TINFO "delete route from the route table"
ROD ip route del $ip4_addr via 127.0.0.1
ip route show | grep 127.0.0.1 > /dev/null
if [ $? -eq 0 ]; then
tst_resm TFAIL "route not deleted"
return
fi
tst_resm TPASS "'ip route' command successfully tested"
}
test06()
{
tst_resm TINFO "test 'ip maddr add/del' commands"
tst_resm TINFO "adding a new multicast addr"
ip maddr add 66:66:00:00:00:66 dev $iface
if [ $? -ne 0 ]; then
tst_resm TFAIL "ip maddr add command failed"
return
fi
tst_resm TINFO "show all multicast addr entries"
cat > tst_ip.exp <<-EOF
link 66:66:00:00:00:66 static
EOF
ip maddr show | grep "66:66:00:00:00:66" > tst_ip.out 2>&1
if [ $? -ne 0 ]; then
tst_resm TFAIL "'ip maddr show' command failed"
return
fi
diff -iwB tst_ip.out tst_ip.exp
if [ $? -ne 0 ]; then
tst_resm TFAIL "multicast addr not added to $iface"
return
fi
tst_resm TINFO "delete multicast address"
ip maddr del 66:66:00:00:00:66 dev $iface
if [ $? -ne 0 ]; then
tst_resm TFAIL "'ip maddr del' command failed"
return
fi
ip maddr show | grep "66:66:00:00:00:66" > /dev/null
if [ $? -eq 0 ]; then
tst_resm TFAIL "66:66:00:00:00:66 is not deleted"
return
fi
tst_resm TPASS "'ip maddr' command successfully tested"
}
init
test01
test02
test03
test04
test05
test06
tst_exit