1 #!/bin/sh 2 # Copyright (c) 2016 Oracle and/or its affiliates. All Rights Reserved. 3 # Copyright (c) International Business Machines Corp., 2000 4 # This program is free software; you can redistribute it and/or 5 # modify it under the terms of the GNU General Public License as 6 # published by the Free Software Foundation; either version 2 of 7 # the License, or (at your option) any later version. 8 # 9 # This program is distributed in the hope that it would be useful, 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 # GNU General Public License for more details. 13 # 14 # You should have received a copy of the GNU General Public License 15 # along with this program. If not, see <http://www.gnu.org/licenses/>. 16 # 17 # Test basic functionality of 'arp' and 'ip neigh'. 18 19 TCID=ipneigh01 20 NUMLOOPS=${NUMLOOPS:-50} 21 TST_TOTAL=2 22 . test_net.sh 23 24 do_setup() 25 { 26 tst_require_root 27 tst_check_cmds ip arp grep ping$TST_IPV6 28 } 29 30 do_test() 31 { 32 local arp_show_cmd="$1" 33 local arp_del_cmd="$2" 34 35 local entry_name 36 [ "$TST_IPV6" ] && entry_name="NDISC" || entry_name="ARP" 37 38 tst_resm TINFO "Stress auto-creation of $entry_name cache entry" 39 tst_resm TINFO "by pinging '$rhost' and deleting entry again" 40 tst_resm TINFO "with '$arp_del_cmd'" 41 42 for i in $(seq 1 $NUMLOOPS); do 43 44 ping$TST_IPV6 -q -c1 $rhost > /dev/null 45 46 local k 47 local ret=1 48 # wait for arp entry at least 3 seconds 49 for k in $(seq 1 30); do 50 $arp_show_cmd | grep -q $rhost 51 if [ $? -eq 0 ]; then 52 ret=0 53 break; 54 fi 55 tst_sleep 100ms 56 done 57 58 [ "$ret" -ne 0 ] && \ 59 tst_brkm TFAIL "$entry_name entry '$rhost' not listed" 60 61 $arp_del_cmd 62 63 $arp_show_cmd | grep -q "${rhost}.*$(tst_hwaddr rhost)" && \ 64 tst_brkm TFAIL "'$arp_del_cmd' failed, entry has " \ 65 "$(tst_hwaddr rhost)' $i/$NUMLOOPS" 66 done 67 68 tst_resm TPASS "verified adding/removing of $entry_name cache entry" 69 } 70 71 do_setup 72 73 rhost=$(tst_ipaddr rhost) 74 75 if [ -z "$TST_IPV6" ]; then 76 do_test "arp -a" "arp -d $rhost" 77 else 78 tst_resm TCONF "'arp cmd doesn't support IPv6, skipping test-case" 79 fi 80 81 do_test "ip neigh show" "ip neigh del $rhost dev $(tst_iface)" 82 83 tst_exit 84