xref: /freebsd-12.1/libexec/rc/rc.d/dhclient (revision 0696600c)
1*0696600cSBjoern A. Zeeb#!/bin/sh
2*0696600cSBjoern A. Zeeb#
3*0696600cSBjoern A. Zeeb# $FreeBSD$
4*0696600cSBjoern A. Zeeb#
5*0696600cSBjoern A. Zeeb
6*0696600cSBjoern A. Zeeb# PROVIDE: dhclient
7*0696600cSBjoern A. Zeeb# KEYWORD: nojailvnet nostart
8*0696600cSBjoern A. Zeeb
9*0696600cSBjoern A. Zeeb. /etc/rc.subr
10*0696600cSBjoern A. Zeeb. /etc/network.subr
11*0696600cSBjoern A. Zeeb
12*0696600cSBjoern A. Zeebifn="$2"
13*0696600cSBjoern A. Zeeb
14*0696600cSBjoern A. Zeebname="dhclient"
15*0696600cSBjoern A. Zeebdesc="Dynamic Host Configuration Protocol (DHCP) client"
16*0696600cSBjoern A. Zeebrcvar=
17*0696600cSBjoern A. Zeebpidfile="/var/run/dhclient/${name}.${ifn}.pid"
18*0696600cSBjoern A. Zeebstart_precmd="dhclient_prestart"
19*0696600cSBjoern A. Zeebstop_precmd="dhclient_pre_check"
20*0696600cSBjoern A. Zeeb
21*0696600cSBjoern A. Zeeb# rc_force check can only be done at the run_rc_command
22*0696600cSBjoern A. Zeeb# time, so we're testing it in the pre* hooks.
23*0696600cSBjoern A. Zeebdhclient_pre_check()
24*0696600cSBjoern A. Zeeb{
25*0696600cSBjoern A. Zeeb	if [ -z "${rc_force}" ] && ! dhcpif $ifn; then
26*0696600cSBjoern A. Zeeb		local msg
27*0696600cSBjoern A. Zeeb		msg="'$ifn' is not a DHCP-enabled interface"
28*0696600cSBjoern A. Zeeb		if [ -z "${rc_quiet}" ]; then
29*0696600cSBjoern A. Zeeb			echo "$msg"
30*0696600cSBjoern A. Zeeb		else
31*0696600cSBjoern A. Zeeb			debug "$msg"
32*0696600cSBjoern A. Zeeb		fi
33*0696600cSBjoern A. Zeeb		exit 1
34*0696600cSBjoern A. Zeeb	fi
35*0696600cSBjoern A. Zeeb}
36*0696600cSBjoern A. Zeeb
37*0696600cSBjoern A. Zeebdhclient_prestart()
38*0696600cSBjoern A. Zeeb{
39*0696600cSBjoern A. Zeeb	dhclient_pre_check
40*0696600cSBjoern A. Zeeb
41*0696600cSBjoern A. Zeeb	# Interface-specific flags (see rc.subr for $flags setting)
42*0696600cSBjoern A. Zeeb	specific=$(get_if_var $ifn dhclient_flags_IF)
43*0696600cSBjoern A. Zeeb	if [ -z "$flags" -a -n "$specific" ]; then
44*0696600cSBjoern A. Zeeb		rc_flags=$specific
45*0696600cSBjoern A. Zeeb	fi
46*0696600cSBjoern A. Zeeb
47*0696600cSBjoern A. Zeeb	background_dhclient=$(get_if_var $ifn background_dhclient_IF $background_dhclient)
48*0696600cSBjoern A. Zeeb	if checkyesno background_dhclient; then
49*0696600cSBjoern A. Zeeb		rc_flags="${rc_flags} -b"
50*0696600cSBjoern A. Zeeb	fi
51*0696600cSBjoern A. Zeeb
52*0696600cSBjoern A. Zeeb	rc_flags="${rc_flags} ${ifn}"
53*0696600cSBjoern A. Zeeb}
54*0696600cSBjoern A. Zeeb
55*0696600cSBjoern A. Zeebload_rc_config $name
56*0696600cSBjoern A. Zeebload_rc_config network
57*0696600cSBjoern A. Zeeb
58*0696600cSBjoern A. Zeebif [ -z $ifn ] ; then
59*0696600cSBjoern A. Zeeb	# only complain if a command was specified but no interface
60*0696600cSBjoern A. Zeeb	if [ -n "$1" ] ; then
61*0696600cSBjoern A. Zeeb		err 1 "$0: no interface specified"
62*0696600cSBjoern A. Zeeb	fi
63*0696600cSBjoern A. Zeebfi
64*0696600cSBjoern A. Zeeb
65*0696600cSBjoern A. Zeebrun_rc_command "$1"
66