dhclient revision 118067
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 118067 2003-07-26 18:58:46Z mtm $
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	rc_flags="${rc_flags} ${_cooked_list}"
63	return 0
64}
65
66dhclient_poststart()
67{
68	for ifn in ${_cooked_list}; do
69		ifalias_up ${ifn}
70		ipx_up ${ifn}
71		ifconfig ${ifn}
72	done
73}
74
75dhclient_prestop()
76{
77	dhclient_common || return 1
78
79	for ifn in ${_cooked_list}; do
80		ipx_down ${ifn}
81		ifalias_down ${ifn}
82	done
83	echo -n "Releasing DHCP leases:"
84	for ifn in $_cooked_list ; do
85		${command} -r $ifn
86		if [ $? -eq 0 ]; then
87			echo -n " $ifn"
88		else
89			_fail="$_fail $ifn"
90		fi
91	done
92	echo '.'
93	debug "The following leases failed to release: $_fail"
94}
95
96dhclient_poststop()
97{
98	for ifn in ${_cooked_list}; do
99		ifscript_down ${ifn}
100	done
101}
102
103if [ -n "$2" ]; then
104	_cmdifn="$2"
105	stop_cmd=":"
106fi
107
108load_rc_config $name
109run_rc_command "$1"
110