dhclient revision 118108
1#!/bin/sh
2#
3# $NetBSD: dhclient,v 1.8 2002/03/22 04:33:58 thorpej Exp $
4# $FreeBSD: head/etc/rc.d/dhclient 118108 2003-07-28 08:15:52Z mbr $
5#
6
7# PROVIDE: dhclient
8# REQUIRE: network netif mountcritlocal
9# BEFORE:  NETWORKING
10# KEYWORD: FreeBSD NetBSD
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
19name="dhclient"
20pidfile="/var/run/${name}.pid"
21case "${OSTYPE}" in
22FreeBSD)
23	rcvar=
24	start_precmd="dhclient_prestart"
25	start_postcmd="dhclient_poststart"
26	stop_precmd="dhclient_prestop"
27	stop_postcmd="dhclient_poststop"
28	;;
29NetBSD)
30	rcvar=$name
31	command="/sbin/${name}"
32	;;
33esac
34
35dhclient_common()
36{
37	dhcp_list="`list_net_interfaces dhcp`"
38	if [ -z "$dhcp_list" ]; then
39		return 1
40	fi
41
42	# Determine the scope of the command
43	#
44	_cooked_list="$dhcp_list"
45	if [ -n "$_cmdifn" ]; then
46		eval _cooked_list=\"`expr "$dhcp_list" : ".*\($_cmdifn\).*"`\"
47		if [ -z "$_cooked_list" ]; then
48			err "No such network interface: $_cmdifn"
49			return 1
50		fi
51	fi
52}
53
54dhclient_prestart()
55{
56	dhclient_common || return 1
57
58	for ifn in ${_cooked_list}; do
59		ifscript_up ${ifn}
60	done
61
62	if checkyesno background_dhclient; then
63		rc_flags="${rc_flags} -nw"
64	fi
65
66	rc_flags="${rc_flags} ${_cooked_list}"
67	return 0
68}
69
70dhclient_poststart()
71{
72	for ifn in ${_cooked_list}; do
73		ifalias_up ${ifn}
74		ipx_up ${ifn}
75		ifconfig ${ifn}
76	done
77}
78
79dhclient_prestop()
80{
81	dhclient_common || return 1
82
83	for ifn in ${_cooked_list}; do
84		ipx_down ${ifn}
85		ifalias_down ${ifn}
86	done
87	echo -n "Releasing DHCP leases:"
88	for ifn in $_cooked_list ; do
89		${command} -r $ifn
90		if [ $? -eq 0 ]; then
91			echo -n " $ifn"
92		else
93			_fail="$_fail $ifn"
94		fi
95	done
96	echo '.'
97	debug "The following leases failed to release: $_fail"
98}
99
100dhclient_poststop()
101{
102	for ifn in ${_cooked_list}; do
103		ifscript_down ${ifn}
104	done
105}
106
107if [ -n "$2" ]; then
108	_cmdifn="$2"
109	stop_cmd=":"
110fi
111
112load_rc_config $name
113run_rc_command "$1"
114