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