dhclient revision 124616
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 124616 2004-01-17 10:16:38Z mtm $
5#
6
7# PROVIDE: dhclient
8# REQUIRE: network netif mountcritlocal
9# BEFORE:  NETWORKING
10# KEYWORD: FreeBSD
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	if [ $dhclient_common_error -eq 1 ]; then
57		return 1
58	fi
59	for ifn in ${_cooked_list}; do
60		ifscript_up ${ifn}
61	done
62
63	if checkyesno background_dhclient; then
64		rc_flags="${rc_flags} -nw"
65	fi
66
67	rc_flags="${rc_flags} ${_cooked_list}"
68	return 0
69}
70
71dhclient_poststart()
72{
73	for ifn in ${_cooked_list}; do
74		ifalias_up ${ifn}
75		ipx_up ${ifn}
76		ifconfig ${ifn}
77	done
78}
79
80dhclient_prestop()
81{
82	if [ $dhclient_common_error -eq 1 ]; then
83		return 1
84	fi
85	for ifn in ${_cooked_list}; do
86		ipx_down ${ifn}
87		ifalias_down ${ifn}
88	done
89	echo -n "Releasing DHCP leases:"
90	for ifn in $_cooked_list ; do
91		${command} -r $ifn
92		if [ $? -eq 0 ]; then
93			echo -n " $ifn"
94		else
95			_fail="$_fail $ifn"
96		fi
97	done
98	echo '.'
99	debug "The following leases failed to release: $_fail"
100}
101
102dhclient_poststop()
103{
104	for ifn in ${_cooked_list}; do
105		ifscript_down ${ifn}
106	done
107}
108
109if [ -n "$2" ]; then
110	_cmdifn="$2"
111	stop_cmd=":"
112fi
113
114load_rc_config $name
115dhclient_common_error=0
116dhclient_common || dhclient_common_error=1;
117if [ -n "$_cooked_list" ]; then
118	if [ -s $pidfile ]; then
119		stop_cmd=":"
120	fi
121fi
122run_rc_command "$1"
123