xref: /dragonfly/etc/rc.d/dhclient (revision aa8d5dcb)
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
20name="dhclient"
21pidfile="/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
30dhclient_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
49dhclient_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
61dhclient_poststart()
62{
63	for ifn in ${_cooked_list}; do
64		ifalias_up ${ifn}
65		ipx_up ${ifn}
66		ifconfig ${ifn}
67	done
68}
69
70dhclient_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
85dhclient_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
95dhclient_poststop()
96{
97	for ifn in ${_cooked_list}; do
98		ifscript_down ${ifn}
99	done
100}
101
102if [ -n "$2" ]; then
103	_cmdifn="$2"
104fi
105
106load_rc_config $name
107
108run_rc_command "$1"
109