1f08c3bdfSopenharmony_ci#!/bin/sh 2f08c3bdfSopenharmony_ci# SPDX-License-Identifier: GPL-2.0-or-later 3f08c3bdfSopenharmony_ci# Copyright (c) 2018 SUSE Linux GmbH 4f08c3bdfSopenharmony_ci# Copyright (c) 2016 Oracle and/or its affiliates. All Rights Reserved. 5f08c3bdfSopenharmony_ci# Copyright (c) International Business Machines Corp., 2000 6f08c3bdfSopenharmony_ci# 7f08c3bdfSopenharmony_ci# Test basic functionality of 'arp' and 'ip neigh'. 8f08c3bdfSopenharmony_ci 9f08c3bdfSopenharmony_ciNUMLOOPS=${NUMLOOPS:-50} 10f08c3bdfSopenharmony_ciTST_TESTFUNC=do_test 11f08c3bdfSopenharmony_ciTST_SETUP=do_setup 12f08c3bdfSopenharmony_ciTST_OPTS="c:" 13f08c3bdfSopenharmony_ciTST_PARSE_ARGS="parse_args" 14f08c3bdfSopenharmony_ciTST_USAGE="usage" 15f08c3bdfSopenharmony_ciTST_NEEDS_ROOT=1 16f08c3bdfSopenharmony_ci 17f08c3bdfSopenharmony_cido_setup() 18f08c3bdfSopenharmony_ci{ 19f08c3bdfSopenharmony_ci case $CMD in 20f08c3bdfSopenharmony_ci ip) 21f08c3bdfSopenharmony_ci SHOW_CMD="ip neigh show" 22f08c3bdfSopenharmony_ci DEL_CMD="ROD ip neigh del $(tst_ipaddr rhost) dev $(tst_iface)" 23f08c3bdfSopenharmony_ci ;; 24f08c3bdfSopenharmony_ci arp) 25f08c3bdfSopenharmony_ci if [ -n "$TST_IPV6" ]; then 26f08c3bdfSopenharmony_ci tst_brk TCONF "'arp' doesn't support IPv6" 27f08c3bdfSopenharmony_ci fi 28f08c3bdfSopenharmony_ci SHOW_CMD="arp -an" 29f08c3bdfSopenharmony_ci DEL_CMD="ROD arp -d $(tst_ipaddr rhost) -i $(tst_iface)" 30f08c3bdfSopenharmony_ci ;; 31f08c3bdfSopenharmony_ci *) 32f08c3bdfSopenharmony_ci tst_brk TBROK "unknown or missing command, use -c [ arp | ip ]" 33f08c3bdfSopenharmony_ci ;; 34f08c3bdfSopenharmony_ci esac 35f08c3bdfSopenharmony_ci 36f08c3bdfSopenharmony_ci tst_require_cmds $CMD ping$TST_IPV6 37f08c3bdfSopenharmony_ci} 38f08c3bdfSopenharmony_ci 39f08c3bdfSopenharmony_ciusage() 40f08c3bdfSopenharmony_ci{ 41f08c3bdfSopenharmony_ci echo "-c [ arp | ip ] Test command" 42f08c3bdfSopenharmony_ci} 43f08c3bdfSopenharmony_ci 44f08c3bdfSopenharmony_ciparse_args() 45f08c3bdfSopenharmony_ci{ 46f08c3bdfSopenharmony_ci case $1 in 47f08c3bdfSopenharmony_ci c) CMD="$2" ;; 48f08c3bdfSopenharmony_ci esac 49f08c3bdfSopenharmony_ci} 50f08c3bdfSopenharmony_ci 51f08c3bdfSopenharmony_cido_test() 52f08c3bdfSopenharmony_ci{ 53f08c3bdfSopenharmony_ci local entry_name="ARP" 54f08c3bdfSopenharmony_ci [ "$TST_IPV6" ] && entry_name="NDISC" 55f08c3bdfSopenharmony_ci 56f08c3bdfSopenharmony_ci tst_res TINFO "stress auto-creation $entry_name cache entry deleted with '$CMD' $NUMLOOPS times" 57f08c3bdfSopenharmony_ci 58f08c3bdfSopenharmony_ci for i in $(seq 1 $NUMLOOPS); do 59f08c3bdfSopenharmony_ci 60f08c3bdfSopenharmony_ci ping$TST_IPV6 -q -c1 $(tst_ipaddr rhost) -I $(tst_iface) > /dev/null || \ 61f08c3bdfSopenharmony_ci tst_brk TFAIL "cannot ping $(tst_ipaddr rhost)" 62f08c3bdfSopenharmony_ci 63f08c3bdfSopenharmony_ci local k 64f08c3bdfSopenharmony_ci local ret=1 65f08c3bdfSopenharmony_ci for k in $(seq 1 30); do 66f08c3bdfSopenharmony_ci $SHOW_CMD | grep -q $(tst_ipaddr rhost) 67f08c3bdfSopenharmony_ci if [ $? -eq 0 ]; then 68f08c3bdfSopenharmony_ci ret=0 69f08c3bdfSopenharmony_ci break; 70f08c3bdfSopenharmony_ci fi 71f08c3bdfSopenharmony_ci tst_sleep 100ms 72f08c3bdfSopenharmony_ci done 73f08c3bdfSopenharmony_ci 74f08c3bdfSopenharmony_ci [ "$ret" -ne 0 ] && \ 75f08c3bdfSopenharmony_ci tst_brk TFAIL "$entry_name entry '$(tst_ipaddr rhost)' not listed" 76f08c3bdfSopenharmony_ci 77f08c3bdfSopenharmony_ci $DEL_CMD 78f08c3bdfSopenharmony_ci 79f08c3bdfSopenharmony_ci $SHOW_CMD | grep -q "$(tst_ipaddr rhost).*$(tst_hwaddr rhost)" && \ 80f08c3bdfSopenharmony_ci tst_brk TFAIL "'$DEL_CMD' failed, entry has " \ 81f08c3bdfSopenharmony_ci "$(tst_hwaddr rhost)' $i/$NUMLOOPS" 82f08c3bdfSopenharmony_ci done 83f08c3bdfSopenharmony_ci 84f08c3bdfSopenharmony_ci tst_res TPASS "verified adding/removing $entry_name cache entry" 85f08c3bdfSopenharmony_ci} 86f08c3bdfSopenharmony_ci 87f08c3bdfSopenharmony_ci. tst_net.sh 88f08c3bdfSopenharmony_citst_run 89