File: check-network-cable

package info (click to toggle)
ifupdown-extra 0.12
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 88 kB
  • ctags: 25
  • sloc: sh: 514; makefile: 50
file content (123 lines) | stat: -rwxr-xr-x 3,380 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#!/bin/sh
# Check the link status of an ethernet interface
# This script should be installed in /etc/network/if-pre-up.d/
#
# You can use this script to solve bug #120382 
# ('ifup should (optionally) check for link before configuring the interface.')
# if you configure ABORT_NO_LINK to 'yes' in /etc/default/network-test
# since this will make the script abort if the interface does not have
# any link.
#
# It can also be used as a standalone script by setting up
# its environment:
#    IFACE=eth0  check-network-cable
#
#   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 will 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, write to the Free Software
#   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#  
# You can also find a copy of the GNU General Public License at
# http://www.gnu.org/licenses/licenses.html#TOCLGPL
#

# Defaults
ETHTOOL=/usr/sbin/ethtool
MIITOOL=/sbin/mii-tool
DO_SYSLOG=yes
ABORT_NO_LINK=no
# Read system default file
[ -r /etc/default/network-test ] && . /etc/default/network-test

# Do not continue if ETHTOOL and MIITOOL is not available
[ ! -x "$ETHTOOL" ] && [ ! -x "$MIITOOL" ] && exit 0
if [ "$DO_SYSLOG" = "yes" ] ; then
	OUTPUT="logger -i -p daemon.err -s"
else
	OUTPUT="echo"
fi

# Set our locale environment, just in case ethtool gets translated
LC_ALL=C
export LC_ALL

check_status_miitool () {
	status=0
	if $MIITOOL $IFACE 2>&1| grep -q "no link"; then
		status=1
	fi
	return $status
}

check_status_ethtool () {
	status=0
	LINK=`$ETHTOOL $IFACE 2>&1| grep "Link detected"`
	# If ethtool fails to print out the link line we break off
	# notice that ethtool cannot get the link status out of all
	# possible network interfaces
	[ -z "$LINK" ] && return
	if ! echo $LINK | grep -q "Link detected: yes" ; then
		status=1
	fi
	return $status
}

check_status_iplink () {
	status=0
	[ ! -x /sbin/ip ] && return 0
	if /sbin/ip link show $IFACE 2>&1 | grep -q "NO-CARRIER"; then
		status=1
	fi
	return $status
}

check_status() {
	ifconfig $IFACE 2>/dev/null 1>&2
	if [ $? -ne 0 ] ; then
		$OUTPUT "ERROR: Interface $IFACE does not seem to be present in the system"
		return
	fi
	status=0
	# Use ethtool if installed (preferable to mii-tool)
	# If none are installed we will test using 'ip link show'
	if [ -x "$ETHTOOL" ] ; then
		check_status_ethtool
		status=$?
	elif [ -x "$MIITOOL" ]; then
		check_status_miitool
		status=$?
	else
		check_status_iplink
		status=$?
	fi
	if [ $status -ne 0 ] ; then
		$OUTPUT "WARNING: Initialising interface $IFACE which does not have link"
	fi
	return $status
}

if [ -z "$IFACE" ] ; then
    echo "ERROR: Variable IFACE not set in environment" >&2
    exit 1
fi

# Check our IFACE name, if it does not start with eth, bail out
case "$IFACE" in 
	eth*) 
		check_status
		if [ $? -ne 0 ] && [ "$ABORT_NO_LINK" = "yes" ] ; then
			exit 1
		fi
		;;
	*) ;;
esac
exit 0