]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - etc/rc.d/netwait
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / etc / rc.d / netwait
1 #!/bin/sh
2
3 # $FreeBSD$
4 #
5 # PROVIDE: netwait
6 # REQUIRE: NETWORKING
7 # KEYWORD: nojail
8 #
9 # The netwait script is intended to be used by systems which have
10 # statically-configured IP addresses in rc.conf(5).  If your system
11 # uses DHCP, you should use synchronous_dhclient="YES" in your
12 # /etc/rc.conf instead of using netwait.
13
14 . /etc/rc.subr
15
16 name="netwait"
17 rcvar="netwait_enable"
18
19 start_cmd="${name}_start"
20 stop_cmd=":"
21
22 netwait_start()
23 {
24         local ip rc count output link
25
26         if [ -z "${netwait_ip}" ]; then
27                 err 1 "You must define one or more IP addresses in netwait_ip"
28         fi
29
30         if [ ${netwait_timeout} -lt 1 ]; then
31                 err 1 "netwait_timeout must be >= 1"
32         fi
33
34         # Handle SIGINT (Ctrl-C); force abort of while() loop
35         trap break SIGINT
36
37         if [ -n "${netwait_if}" ]; then
38                 echo -n "Waiting for $netwait_if to have link"
39
40                 count=1
41                 while [ ${count} -le ${netwait_if_timeout} ]; do
42                         if output=`/sbin/ifconfig ${netwait_if} 2>/dev/null`; then
43                                 link=`expr "${output}" : '.*[[:blank:]]status: \(no carrier\)'`
44                                 if [ -z "${link}" ]; then
45                                         echo '.'
46                                         break
47                                 fi
48                         else
49                                 echo ''
50                                 err 1 "ifconfig ${netwait_if} failed"
51                         fi
52                         sleep 1
53                         count=$((count+1))
54                 done
55                 if [ -n "${link}" ]; then
56                         # Restore default SIGINT handler
57                         trap - SIGINT
58
59                         echo ''
60                         warn "Interface still has no link.  Continuing with startup, but"
61                         warn "be aware you may not have a fully functional networking"
62                         warn "layer at this point."
63                         return
64                 fi
65         fi
66
67         # Handle SIGINT (Ctrl-C); force abort of while() loop
68         trap break SIGINT
69
70         for ip in ${netwait_ip}; do
71                 echo -n "Waiting for ${ip} to respond to ICMP"
72
73                 count=1
74                 while [ ${count} -le ${netwait_timeout} ]; do
75                         /sbin/ping -t 1 -c 1 -o ${ip} >/dev/null 2>&1
76                         rc=$?
77
78                         if [ $rc -eq 0 ]; then
79                                 # Restore default SIGINT handler
80                                 trap - SIGINT
81
82                                 echo '.'
83                                 return
84                         fi
85                         count=$((count+1))
86                 done
87                 echo ': No response from host.'
88         done
89
90         # Restore default SIGINT handler
91         trap - SIGINT
92
93         warn "Exhausted IP list.  Continuing with startup, but be aware you may"
94         warn "not have a fully functional networking layer at this point."
95 }
96
97 load_rc_config $name
98 run_rc_command "$1"