]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - etc/rc.d/dhclient
Merge branch 'releng/11.3' into releng-CDN/11.3
[FreeBSD/FreeBSD.git] / etc / rc.d / dhclient
1 #!/bin/sh
2 #
3 # $FreeBSD$
4 #
5
6 # PROVIDE: dhclient
7 # KEYWORD: nojail nostart
8
9 . /etc/rc.subr
10 . /etc/network.subr
11
12 ifn="$2"
13
14 name="dhclient"
15 desc="Dynamic Host Configuration Protocol (DHCP) client"
16 rcvar=
17 pidfile="/var/run/${name}.${ifn}.pid"
18 start_precmd="dhclient_prestart"
19 stop_precmd="dhclient_pre_check"
20
21 # rc_force check can only be done at the run_rc_command
22 # time, so we're testing it in the pre* hooks.
23 dhclient_pre_check()
24 {
25         if [ -z "${rc_force}" ] && ! dhcpif $ifn; then
26                 local msg
27                 msg="'$ifn' is not a DHCP-enabled interface"
28                 if [ -z "${rc_quiet}" ]; then
29                         echo "$msg"
30                 else
31                         debug "$msg"
32                 fi
33                 exit 1
34         fi
35 }
36
37 dhclient_prestart()
38 {
39         dhclient_pre_check
40
41         # Interface-specific flags (see rc.subr for $flags setting)
42         specific=$(get_if_var $ifn dhclient_flags_IF)
43         if [ -z "$flags" -a -n "$specific" ]; then
44                 rc_flags=$specific
45         fi
46
47         background_dhclient=$(get_if_var $ifn background_dhclient_IF $background_dhclient)
48         if checkyesno background_dhclient; then
49                 rc_flags="${rc_flags} -b"
50         fi
51
52         rc_flags="${rc_flags} ${ifn}"
53 }
54
55 load_rc_config $name
56 load_rc_config network
57
58 if [ -z $ifn ] ; then
59         # only complain if a command was specified but no interface
60         if [ -n "$1" ] ; then
61                 err 1 "$0: no interface specified"
62         fi
63 fi
64
65 run_rc_command "$1"