Merge from vendor branch CVS:
[dragonfly.git] / etc / rc.d / dhclient
1 #!/bin/sh
2 #
3 # $NetBSD: dhclient,v 1.8 2002/03/22 04:33:58 thorpej Exp $
4 # $FreeBSD: src/etc/rc.d/dhclient,v 1.6 2003/06/29 05:34:41 mtm Exp $
5 # $DragonFly: src/etc/rc.d/dhclient,v 1.5 2004/01/26 17:21:15 rob Exp $
6 #
7
8 # PROVIDE: dhclient
9 # REQUIRE: network netif mountcritlocal
10 # BEFORE:  NETWORKING
11 # KEYWORD: DragonFly
12 #
13 #       Note that there no syslog logging of dhclient messages at boot because
14 #       dhclient needs to start before services that syslog depends upon do.
15 #
16
17 . /etc/rc.subr
18 . /etc/network.subr
19
20 name="dhclient"
21 pidfile="/var/run/${name}.pid"
22         rcvar=
23         start_precmd="dhclient_prestart"
24         start_postcmd="dhclient_poststart"
25         stop_cmd="dhclient_stop"
26         stop_precmd="dhclient_prestop"
27         stop_postcmd="dhclient_poststop"
28
29
30 dhclient_common()
31 {
32         dhcp_list="`list_net_interfaces dhcp`"
33         if [ -z "$dhcp_list" ]; then
34                 return $RC_IRRELEVANT
35         fi
36
37         # Determine the scope of the command
38         #
39         _cooked_list="$dhcp_list"
40         if [ -n "$_cmdifn" ]; then
41                 eval _cooked_list=\"`expr "$dhcp_list" : ".*\($_cmdifn\).*"`\"
42                 if [ -z "$_cooked_list" ]; then
43                         err "No such network interface: $_cmdifn"
44                         return 1
45                 fi
46         fi
47 }
48
49 dhclient_prestart()
50 {
51         dhclient_common || return $?
52
53         for ifn in ${_cooked_list}; do
54                 ifscript_up ${ifn}
55         done
56
57         rc_flags="${rc_flags} ${_cooked_list}"
58         return 0
59 }
60
61 dhclient_poststart()
62 {
63         for ifn in ${_cooked_list}; do
64                 ifalias_up ${ifn}
65                 ipx_up ${ifn}
66                 ifconfig ${ifn}
67         done
68 }
69
70 dhclient_stop()
71 {
72         echo -n "Releasing DHCP leases:"
73         for ifn in $_cooked_list ; do
74                 ${command} -r $ifn
75                 if [ $? -eq 0 ]; then
76                         echo -n " $ifn"
77                 else
78                         _fail="$_fail $ifn"
79                 fi
80         done
81         echo '.'
82         debug "The following leases failed to release: $_fail"
83 }
84
85 dhclient_prestop()
86 {
87         dhclient_common || return $?
88
89         for ifn in ${_cooked_list}; do
90                 ipx_down ${ifn}
91                 ifalias_down ${ifn}
92         done
93 }
94
95 dhclient_poststop()
96 {
97         for ifn in ${_cooked_list}; do
98                 ifscript_down ${ifn}
99         done
100 }
101
102 if [ -n "$2" ]; then
103         _cmdifn="$2"
104 fi
105
106 load_rc_config $name
107
108 run_rc_command "$1"