| #!/bin/sh |
| # Copyright (c) 2016 Oracle and/or its affiliates. All Rights Reserved. |
| # 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 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, see <http://www.gnu.org/licenses/>. |
| # |
| # Test basic functionality of 'arp' and 'ip neigh'. |
| |
| TCID=ipneigh01 |
| NUMLOOPS=${NUMLOOPS:-50} |
| TST_TOTAL=2 |
| . test_net.sh |
| |
| do_setup() |
| { |
| tst_require_root |
| tst_check_cmds ip arp grep ping$TST_IPV6 |
| } |
| |
| do_test() |
| { |
| local arp_show_cmd="$1" |
| local arp_del_cmd="$2" |
| |
| local entry_name |
| [ "$TST_IPV6" ] && entry_name="NDISC" || entry_name="ARP" |
| |
| tst_resm TINFO "Stress auto-creation of $entry_name cache entry" |
| tst_resm TINFO "by pinging '$rhost' and deleting entry again" |
| tst_resm TINFO "with '$arp_del_cmd'" |
| |
| for i in $(seq 1 $NUMLOOPS); do |
| |
| ping$TST_IPV6 -q -c1 $rhost > /dev/null |
| |
| local k |
| local ret=1 |
| # wait for arp entry at least 3 seconds |
| for k in $(seq 1 30); do |
| $arp_show_cmd | grep -q $rhost |
| if [ $? -eq 0 ]; then |
| ret=0 |
| break; |
| fi |
| tst_sleep 100ms |
| done |
| |
| [ "$ret" -ne 0 ] && \ |
| tst_brkm TFAIL "$entry_name entry '$rhost' not listed" |
| |
| $arp_del_cmd |
| |
| $arp_show_cmd | grep -q "${rhost}.*$(tst_hwaddr rhost)" && \ |
| tst_brkm TFAIL "'$arp_del_cmd' failed, entry has " \ |
| "$(tst_hwaddr rhost)' $i/$NUMLOOPS" |
| done |
| |
| tst_resm TPASS "verified adding/removing of $entry_name cache entry" |
| } |
| |
| do_setup |
| |
| rhost=$(tst_ipaddr rhost) |
| |
| if [ -z "$TST_IPV6" ]; then |
| do_test "arp -a" "arp -d $rhost" |
| else |
| tst_resm TCONF "'arp cmd doesn't support IPv6, skipping test-case" |
| fi |
| |
| do_test "ip neigh show" "ip neigh del $rhost dev $(tst_iface)" |
| |
| tst_exit |