178344Sobrien#!/bin/sh
278344Sobrien#
398184Sgordon# $FreeBSD$
478344Sobrien#
578344Sobrien
678344Sobrien# PROVIDE: dhclient
7147088Sbrooks# KEYWORD: nojail nostart
878344Sobrien
978344Sobrien. /etc/rc.subr
10113675Smtm. /etc/network.subr
1178344Sobrien
12226345Sdesifn="$2"
13226345Sdes
1478344Sobrienname="dhclient"
15124618Smtmrcvar=
16226345Sdespidfile="/var/run/${name}.${ifn}.pid"
17226345Sdesstart_precmd="dhclient_prestart"
18226879Sreastop_precmd="dhclient_pre_check"
1978344Sobrien
20226879Srea# rc_force check can only be done at the run_rc_command
21226879Srea# time, so we're testing it in the pre* hooks.
22226879Sreadhclient_pre_check()
23226879Srea{
24226879Srea	if [ -z "${rc_force}" ] && ! dhcpif $ifn; then
25230007Srea		local msg
26230007Srea		msg="'$ifn' is not a DHCP-enabled interface"
27230007Srea		if [ -z "${rc_quiet}" ]; then
28230388Srea			echo "$msg"
29230007Srea		else
30230007Srea			debug "$msg"
31230388Srea		fi
32230007Srea			exit 1
33226879Srea	fi
34226879Srea}
35226879Srea
36226345Sdesdhclient_prestart()
37113675Smtm{
38226879Srea	dhclient_pre_check
39226879Srea
40226345Sdes	# Interface-specific flags (see rc.subr for $flags setting)
41226345Sdes	specific=$(get_if_var $ifn dhclient_flags_IF)
42161410Sbrian	if [ -z "$flags" -a -n "$specific" ]; then
43161410Sbrian		rc_flags=$specific
44161410Sbrian	fi
45161410Sbrian
46226345Sdes	background_dhclient=$(get_if_var $ifn background_dhclient_IF $background_dhclient)
47167881Smtm	if checkyesno background_dhclient; then
48147088Sbrooks		rc_flags="${rc_flags} -b"
49118108Smbr	fi
50118108Smbr
51226345Sdes	rc_flags="${rc_flags} ${ifn}"
52113675Smtm}
53113675Smtm
54147088Sbrooksload_rc_config $name
55162972Sbrooksload_rc_config network
56117021Smtm
57226345Sdesif [ -z $ifn ] ; then
58226345Sdes	# only complain if a command was specified but no interface
59226345Sdes	if [ -n "$1" ] ; then
60226879Srea		err 1 "$0: no interface specified"
61226345Sdes	fi
62117021Smtmfi
63117021Smtm
6478344Sobrienrun_rc_command "$1"
65