Home | History | Annotate | Download | only in iproute
      1 #! /bin/sh
      2 # Copyright (c) 2014-2016 Oracle and/or its affiliates. All Rights Reserved.
      3 # Copyright (c) International Business Machines  Corp., 2001
      4 #
      5 # This program is free software; you can redistribute it and/or
      6 # modify it under the terms of the GNU General Public License as
      7 # published by the Free Software Foundation; either version 2 of
      8 # the License, or (at your option) any later version.
      9 #
     10 # This program is distributed in the hope that it would be useful,
     11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13 # GNU General Public License for more details.
     14 #
     15 # You should have received a copy of the GNU General Public License
     16 # along with this program; if not, write the Free Software Foundation,
     17 # Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
     18 #
     19 # Description:  Test basic functionality of ip command in route2 package
     20 #
     21 # Author:       Manoj Iyer, manjo (at] mail.utexas.edu
     22 
     23 TST_CLEANUP=cleanup
     24 TST_TOTAL=6
     25 TCID="ip_tests"
     26 
     27 . test_net.sh
     28 
     29 rm_dummy=
     30 
     31 init()
     32 {
     33 	tst_resm TINFO "inititalizing tests"
     34 	tst_require_root
     35 	tst_tmpdir
     36 	tst_check_cmds cat awk ip diff
     37 
     38 	iface=ltp_dummy
     39 	lsmod | grep -q dummy || rm_dummy=1
     40 
     41 	ROD ip li add $iface type dummy
     42 
     43 	ip4_addr=${IPV4_NET16_UNUSED}.6.6
     44 	ROD ip a add ${ip4_addr}/24 dev $iface
     45 
     46 	cat > tst_ip02.exp <<-EOF
     47 	1:
     48 	link/loopback
     49 	2:
     50 	link/ether
     51 	3:
     52 	link/ether
     53 	EOF
     54 
     55 	if [ $? -ne 0 ]; then
     56 		tst_brkm TBROK "can't create expected output for test02"
     57 	fi
     58 }
     59 
     60 cleanup()
     61 {
     62 	tst_rmdir
     63 
     64 	[ -n "$iface" -a -d /sys/class/net/$iface ] && ip li del $iface
     65 
     66 	[ "$rm_dummy" ] && modprobe -r dummy
     67 
     68 	# test #5
     69 	ip route show | grep $ip4_addr && ip route del $ip4_addr
     70 }
     71 
     72 test01()
     73 {
     74 	tst_resm TINFO "test 'ip link set' command"
     75 	tst_resm TINFO "changing mtu size of $iface device"
     76 
     77 	MTUSZ_BAK=$(cat /sys/class/net/${iface}/mtu)
     78 	ip link set ${iface} mtu 1281
     79 	if [ $? -ne 0 ]; then
     80 		tst_resm TFAIL "ip command failed"
     81 		return
     82 	fi
     83 
     84 	MTUSZ=$(cat /sys/class/net/${iface}/mtu)
     85 	if [ $MTUSZ -eq 1281 ]; then
     86 		tst_resm TPASS "successfully changed mtu size"
     87 		ip link set $iface mtu $MTUSZ_BAK
     88 	else
     89 		tst_resm TFAIL "MTU value set to $MTUSZ, but expected 1281"
     90 	fi
     91 }
     92 
     93 test02()
     94 {
     95 	tst_resm TINFO "test 'ip link show' command (list device attributes)"
     96 
     97 	ip link show $iface | grep $iface > /dev/null
     98 	if [ $? -ne 0 ]; then
     99 		tst_resm TFAIL "'ip link show $iface' command failed"
    100 		return
    101 	fi
    102 
    103 	tst_resm TPASS "$iface correctly listed"
    104 }
    105 
    106 test03()
    107 {
    108 	tst_resm TINFO "test 'ip addr' command with loopback dev"
    109 	tst_resm TINFO "add a new protocol address to the device"
    110 
    111 	ip addr add 127.6.6.6/24 dev lo
    112 	if [ $? -ne 0 ]; then
    113 		tst_resm TFAIL "'ip addr add' command failed"
    114 		return
    115 	fi
    116 
    117 	tst_resm TINFO "show protocol address"
    118 	ip addr show dev lo | grep 127.6.6.6 > /dev/null
    119 	if [ $? -ne 0 ]; then
    120 		tst_resm TFAIL "'ip addr show' command failed"
    121 		return
    122 	fi
    123 
    124 	tst_resm TINFO "delete protocol address"
    125 	ip addr del 127.6.6.6/24 dev lo
    126 	if [ $? -ne 0 ]; then
    127 		tst_resm TFAIL "'ip addr del' command failed"
    128 		return
    129 	fi
    130 
    131 	ip addr show dev lo | grep 127.6.6.6 > /dev/null
    132 	if [ $? -eq 0 ]; then
    133 		tst_resm TFAIL "ip addr del command failed"
    134 		return
    135 	fi
    136 
    137 	tst_resm TPASS "'ip addr' command successfully tested"
    138 }
    139 
    140 test04()
    141 {
    142 	tst_resm TINFO "test 'ip neigh' command"
    143 	tst_resm TINFO "add a new neighbor (or replace existed)"
    144 	ip neigh replace 127.6.6.6 lladdr 00:00:00:00:00:00 dev lo nud reachable
    145 	if [ $? -ne 0 ]; then
    146 		tst_resm TFAIL "'ip neigh replace' command failed"
    147 		return
    148 	fi
    149 
    150 	tst_resm TINFO "show all neighbor entries in arp tables"
    151 	cat > tst_ip.exp <<-EOF
    152 127.6.6.6 dev lo lladdr 00:00:00:00:00:00 REACHABLE
    153 	EOF
    154 
    155 	ip neigh show 127.6.6.6 | head -n1 > tst_ip.out 2>&1
    156 	if [ $? -ne 0 ]; then
    157 		tst_resm TFAIL "'ip neigh show' command failed"
    158 		return
    159 	fi
    160 
    161 	diff -iwB tst_ip.out tst_ip.exp
    162 	if [ $? -ne 0 ]; then
    163 		tst_resm TFAIL "expected output differs from actual output"
    164 		return
    165 	fi
    166 
    167 	tst_resm TINFO "delete neighbor from the arp table"
    168 
    169 	ip neigh del 127.6.6.6 dev lo
    170 	if [ $? -ne 0 ]; then
    171 		tst_resm TFAIL "'ip neigh del' command failed"
    172 		return
    173 	fi
    174 
    175 	ip neigh show | grep 127.6.6.6 | grep -v ' FAILED$' > /dev/null
    176 	if [ $? -eq 0 ]; then
    177 		tst_resm TFAIL "127.6.6.6 still listed in arp"
    178 		return
    179 	fi
    180 
    181 	tst_resm TPASS "'ip neigh' command successfully tested"
    182 }
    183 
    184 test05()
    185 {
    186 	tst_resm TINFO "test 'ip route add/del' commands"
    187 
    188 	ROD ip route add $ip4_addr via 127.0.0.1
    189 
    190 	tst_resm TINFO "show all route entries in route table"
    191 
    192 	# create expected output file.
    193 	cat > tst_ip.exp <<-EOF
    194 $ip4_addr via 127.0.0.1 dev lo
    195 	EOF
    196 
    197 	ip route show | grep "$ip4_addr via 127.0.0.1 dev lo" > tst_ip.out 2>&1
    198 	if [ $? -ne 0 ]; then
    199 		tst_resm TFAIL "'ip route show' command failed"
    200 		return
    201 	fi
    202 
    203 	diff -iwB tst_ip.out tst_ip.exp
    204 	if [ $? -ne 0 ]; then
    205 		tst_resm TFAIL "'ip route show' did not list new route"
    206 		return
    207 	fi
    208 
    209 	tst_resm TINFO "delete route from the route table"
    210 
    211 	ROD ip route del $ip4_addr via 127.0.0.1
    212 
    213 	ip route show | grep 127.0.0.1 > /dev/null
    214 	if [ $? -eq 0 ]; then
    215 		tst_resm TFAIL "route not deleted"
    216 		return
    217 	fi
    218 
    219 	tst_resm TPASS "'ip route' command successfully tested"
    220 }
    221 
    222 test06()
    223 {
    224 	tst_resm TINFO "test 'ip maddr add/del' commands"
    225 	tst_resm TINFO "adding a new multicast addr"
    226 
    227 	ip maddr add 66:66:00:00:00:66 dev $iface
    228 	if [ $? -ne 0 ]; then
    229 		tst_resm TFAIL "ip maddr add command failed"
    230 		return
    231 	fi
    232 
    233 	tst_resm TINFO "show all multicast addr entries"
    234 
    235 	cat > tst_ip.exp <<-EOF
    236         link  66:66:00:00:00:66 static
    237 	EOF
    238 
    239 	ip maddr show | grep "66:66:00:00:00:66" > tst_ip.out 2>&1
    240 	if [ $? -ne 0 ]; then
    241 		tst_resm TFAIL "'ip maddr show' command failed"
    242 		return
    243 	fi
    244 
    245 	diff -iwB tst_ip.out tst_ip.exp
    246 	if [ $? -ne 0 ]; then
    247 		tst_resm TFAIL "multicast addr not added to $iface"
    248 		return
    249 	fi
    250 
    251 	tst_resm TINFO "delete multicast address"
    252 
    253 	ip maddr del 66:66:00:00:00:66 dev $iface
    254 	if [ $? -ne 0 ]; then
    255 		tst_resm TFAIL "'ip maddr del' command failed"
    256 		return
    257 	fi
    258 
    259 	ip maddr show | grep "66:66:00:00:00:66" > /dev/null
    260 	if [ $? -eq 0 ]; then
    261 		tst_resm TFAIL "66:66:00:00:00:66 is not deleted"
    262 		return
    263 	fi
    264 
    265 	tst_resm TPASS "'ip maddr' command successfully tested"
    266 }
    267 
    268 init
    269 
    270 test01
    271 test02
    272 test03
    273 test04
    274 test05
    275 test06
    276 
    277 tst_exit
    278