1cd30c339dae692a3eb5c5fc55f70726457f4756bmridge#!/bin/sh 2f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev# Copyright (c) 2015 Oracle and/or its affiliates. All Rights Reserved. 3f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev# Copyright (c) International Business Machines Corp., 2005 4cd30c339dae692a3eb5c5fc55f70726457f4756bmridge# 5f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev# This program is free software; you can redistribute it and/or 6f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev# modify it under the terms of the GNU General Public License as 7f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev# published by the Free Software Foundation; either version 2 of 8f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev# the License, or (at your option) any later version. 9cd30c339dae692a3eb5c5fc55f70726457f4756bmridge# 10f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev# This program is distributed in the hope that it would be useful, 11f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev# but WITHOUT ANY WARRANTY; without even the implied warranty of 12f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev# GNU General Public License for more details. 14cd30c339dae692a3eb5c5fc55f70726457f4756bmridge# 15f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev# You should have received a copy of the GNU General Public License 16f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev# along with this program. If not, see <http://www.gnu.org/licenses/>. 17cd30c339dae692a3eb5c5fc55f70726457f4756bmridge# 18f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev# Author: Mitsuru Chinen <mitch@jp.ibm.com> 19cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 20f925eece9747ff2579a0e59b18bcd14353d58452Alexey KodanevTST_TOTAL=2 21f925eece9747ff2579a0e59b18bcd14353d58452Alexey KodanevTCID=if-addr-adddel 22cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 23f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev. if-lib.sh 24cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 25f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev# The interval of the check interface activity (check ten times) 26f925eece9747ff2579a0e59b18bcd14353d58452Alexey KodanevCHECK_INTERVAL=${CHECK_INTERVAL:-$(($NS_TIMES / 100))} 27cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 28f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanevtest_body() 29cd30c339dae692a3eb5c5fc55f70726457f4756bmridge{ 30f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev local cmd_type=$1 31cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 32f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev case $cmd_type in 33f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev if_cmd) local cmd_name='ifconfig' ;; 34f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev ip_cmd) local cmd_name='ip' ;; 35f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev *) tst_brkm TBROK "Unknown test parameter '$cmd_type'" 36f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev esac 37cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 38f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev local num=$(($(od -A n -d -N 1 /dev/random) * 253 / 255 + 2 )) 39f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev local iface=$(tst_iface) 40f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev if [ "$TST_IPV6" ]; then 41f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev local new_ip=${IPV6_NET32_UNUSED}::$num 42f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev local netmask=64 43f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev else 44f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev local new_ip=${IPV4_NET16_UNUSED}.1.$num 45f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev local netmask=24 46f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev fi 47cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 48f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev tst_resm TINFO "'$cmd_name' add/del IPv$ipver '$new_ip' $NS_TIMES times" 49cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 50f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev tst_restore_ipaddr || \ 51f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev tst_resm TBROK "Failed to set default IP addresses" 52cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 53f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev make_background_tcp_traffic 54cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 55f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev local cnt=1 56f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev while [ $cnt -le $NS_TIMES ]; do 57cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 58f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev case $cmd_type in 59f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev if_cmd) 60f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev if [ "$TST_IPV6" ]; then 61f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev ifconfig $iface add $new_ip/$netmask 62f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev else 63f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev ifconfig $iface:1 $new_ip netmask 255.255.255.0 64f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev fi 65f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev ;; 66f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev ip_cmd) ip addr add $new_ip/$netmask dev $iface ;; 67f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev esac 68cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 69f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev if [ $? -ne 0 ]; then 70f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev tst_resm TFAIL "command failed to add $new_ip to $iface" 71f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev return 72f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev fi 73cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 74f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev ip addr show $iface | grep -q $new_ip 75f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev if [ $? -ne 0 ]; then 76f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev ip addr show $iface 77f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev tst_resm TFAIL "$new_ip not configured" 78f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev return 79f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev fi 80cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 81f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev check_connectivity $cnt || return 82cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 83f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev cnt=$(($cnt + 1)) 84cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 85f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev # Check the background TCP traffic 86f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev pgrep -x tcp_fastopen > /dev/null || make_background_tcp_traffic 87cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 88f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev case $cmd_type in 89f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev if_cmd) 90f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev if [ "$TST_IPV6" ]; then 91f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev ifconfig $iface del $new_ip/$netmask 92f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev else 93f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev ifconfig $iface:1 down 94f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev fi 95f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev ;; 96f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev ip_cmd) ip addr del $new_ip/$netmask dev $iface ;; 97f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev esac 98cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 99cd30c339dae692a3eb5c5fc55f70726457f4756bmridge if [ $? -ne 0 ]; then 100f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev tst_resm TFAIL " delete command failed". 101f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev return 102cd30c339dae692a3eb5c5fc55f70726457f4756bmridge fi 103cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 104f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev ip addr show $iface | grep -q $new_ip 105f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev if [ $? -eq 0 ]; then 106f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev ip addr show $iface 107f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev tst_resm TFAIL "Failed to remove '$new_ip' address" 108f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev return 109f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev fi 110f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev done 111cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 112f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanev tst_resm TPASS "Test is finished correctly" 113cd30c339dae692a3eb5c5fc55f70726457f4756bmridge} 114cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 115f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanevsetup 116cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 117f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanevtst_check_cmds ifconfig 118cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 119f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanevtest_body 'if_cmd' 120f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanevtest_body 'ip_cmd' 121cd30c339dae692a3eb5c5fc55f70726457f4756bmridge 122f925eece9747ff2579a0e59b18bcd14353d58452Alexey Kodanevtst_exit 123