blob: 7ea7a4cdde5d0a37da45c97d06a1835ee9e9e84f (
plain)
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
|
#!/bin/sh
# $FreeBSD$
#
# PROVIDE: netwait
# REQUIRE: NETWORKING
# KEYWORD: nojail
#
# The netwait script is intended to be used by systems which have
# statically-configured IP addresses in rc.conf(5). If your system
# uses DHCP, you should use synchronous_dhclient="YES" in your
# /etc/rc.conf instead of using netwait.
. /etc/rc.subr
name="netwait"
rcvar="netwait_enable"
start_cmd="${name}_start"
stop_cmd=":"
netwait_start()
{
local ip rc count output link
if [ -z "${netwait_ip}" ]; then
err 1 "You must define one or more IP addresses in netwait_ip"
fi
if [ ${netwait_timeout} -lt 1 ]; then
err 1 "netwait_timeout must be >= 1"
fi
# Handle SIGINT (Ctrl-C); force abort of while() loop
trap break SIGINT
if [ -n "${netwait_if}" ]; then
echo -n "Waiting for $netwait_if to have link"
count=1
while [ ${count} -le ${netwait_if_timeout} ]; do
if output=`/sbin/ifconfig ${netwait_if} 2>/dev/null`; then
link=`expr "${output}" : '.*[[:blank:]]status: \(no carrier\)'`
if [ -z "${link}" ]; then
echo '.'
break
fi
else
echo ''
err 1 "ifconfig ${netwait_if} failed"
fi
sleep 1
count=$((count+1))
done
if [ -n "${link}" ]; then
# Restore default SIGINT handler
trap - SIGINT
echo ''
warn "Interface still has no link. Continuing with startup, but"
warn "be aware you may not have a fully functional networking"
warn "layer at this point."
return
fi
fi
# Handle SIGINT (Ctrl-C); force abort of while() loop
trap break SIGINT
for ip in ${netwait_ip}; do
echo -n "Waiting for ${ip} to respond to ICMP"
count=1
while [ ${count} -le ${netwait_timeout} ]; do
/sbin/ping -t 1 -c 1 -o ${ip} >/dev/null 2>&1
rc=$?
if [ $rc -eq 0 ]; then
# Restore default SIGINT handler
trap - SIGINT
echo '.'
return
fi
count=$((count+1))
done
echo ': No response from host.'
done
# Restore default SIGINT handler
trap - SIGINT
warn "Exhausted IP list. Continuing with startup, but be aware you may"
warn "not have a fully functional networking layer at this point."
}
load_rc_config $name
run_rc_command "$1"
|