1cd30c339dae692a3eb5c5fc55f70726457f4756bmridge#!/bin/sh
2c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev# Copyright (c) 2015 Oracle and/or its affiliates. All Rights Reserved.
3c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev# Copyright (c) International Business Machines  Corp., 2005
4cd30c339dae692a3eb5c5fc55f70726457f4756bmridge#
5c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev# This program is free software; you can redistribute it and/or
6c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev# modify it under the terms of the GNU General Public License as
7c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev# published by the Free Software Foundation; either version 2 of
8c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev# the License, or (at your option) any later version.
9cd30c339dae692a3eb5c5fc55f70726457f4756bmridge#
10c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev# This program is distributed in the hope that it would be useful,
11c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev# but WITHOUT ANY WARRANTY; without even the implied warranty of
12c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev# GNU General Public License for more details.
14cd30c339dae692a3eb5c5fc55f70726457f4756bmridge#
15c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev# You should have received a copy of the GNU General Public License
16c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev# along with this program. If not, see <http://www.gnu.org/licenses/>.
17cd30c339dae692a3eb5c5fc55f70726457f4756bmridge#
18c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev# Author: Mitsuru Chinen <mitch@jp.ibm.com>
19cd30c339dae692a3eb5c5fc55f70726457f4756bmridge
20cd30c339dae692a3eb5c5fc55f70726457f4756bmridgeTST_TOTAL=2
21c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey KodanevTCID=if-updown
22cd30c339dae692a3eb5c5fc55f70726457f4756bmridge
23c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev. if-lib.sh
24cd30c339dae692a3eb5c5fc55f70726457f4756bmridge
25d17aac79d4f66b7e51abd9f33158f0f19fe7272cAlexey KodanevCHECK_INTERVAL=${CHECK_INTERVAL:-$(($IF_UPDOWN_TIMES / 20))}
26cd30c339dae692a3eb5c5fc55f70726457f4756bmridge
27cd30c339dae692a3eb5c5fc55f70726457f4756bmridgetest_body()
28cd30c339dae692a3eb5c5fc55f70726457f4756bmridge{
29c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev	local cmd_type=$1
30cd30c339dae692a3eb5c5fc55f70726457f4756bmridge
31c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev	case $cmd_type in
32c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev	if_cmd) local cmd_name='ifconfig' ;;
33c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev	ip_cmd) local cmd_name='ip' ;;
34c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev	*) tst_brkm TBROK "Unknown test parameter '$cmd_type'"
35c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev	esac
36cd30c339dae692a3eb5c5fc55f70726457f4756bmridge
37c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev	local iface=$(tst_iface)
38cd30c339dae692a3eb5c5fc55f70726457f4756bmridge
39c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev	tst_resm TINFO "'$cmd_name ups/downs $iface $IF_UPDOWN_TIMES times"
40c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev	tst_resm TINFO "check connectivity interval is $CHECK_INTERVAL"
41cd30c339dae692a3eb5c5fc55f70726457f4756bmridge
42c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev	local cnt=1
43c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev	while [ $cnt -le $IF_UPDOWN_TIMES ]; do
44c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev		case $cmd_type in
45c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev		if_cmd) ifconfig $iface down ;;
46c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev		ip_cmd) ip link set $iface down ;;
47c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev		esac
48c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev		if [ $? -ne 0 ]; then
49c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev			tst_resm TFAIL "Failed to down $iface"
50c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev			return
51c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev		fi
52cd30c339dae692a3eb5c5fc55f70726457f4756bmridge
53c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev		case $cmd_type in
54c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev		if_cmd) ifconfig $iface up ;;
55c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev		ip_cmd) ip link set $iface up ;;
56c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev		esac
57cd30c339dae692a3eb5c5fc55f70726457f4756bmridge		if [ $? -ne 0 ]; then
58c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev			tst_resm TFAIL "Failed to up $iface"
59c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev			return
60cd30c339dae692a3eb5c5fc55f70726457f4756bmridge		fi
61cd30c339dae692a3eb5c5fc55f70726457f4756bmridge
62d17aac79d4f66b7e51abd9f33158f0f19fe7272cAlexey Kodanev		check_connectivity $cnt restore_ip || return
63c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev
64c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev		cnt=$(($cnt + 1))
65c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev	done
66cd30c339dae692a3eb5c5fc55f70726457f4756bmridge
67c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanev	tst_resm TPASS "Test is finished correctly"
68cd30c339dae692a3eb5c5fc55f70726457f4756bmridge}
69cd30c339dae692a3eb5c5fc55f70726457f4756bmridge
70c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanevsetup
71cd30c339dae692a3eb5c5fc55f70726457f4756bmridge
72c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanevtst_check_cmds ifconfig
73cd30c339dae692a3eb5c5fc55f70726457f4756bmridge
74c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanevtest_body 'if_cmd'
75c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanevtest_body 'ip_cmd'
76cd30c339dae692a3eb5c5fc55f70726457f4756bmridge
77c0e4f672ddaf0f715da0995fff2e8c9d1c022fb3Alexey Kodanevtst_exit
78