#!/bin/sh # # $NetBSD: dhclient,v 1.8 2002/03/22 04:33:58 thorpej Exp $ # $FreeBSD: src/etc/rc.d/dhclient,v 1.6 2003/06/29 05:34:41 mtm Exp $ # $DragonFly: src/etc/rc.d/dhclient,v 1.6 2005/07/25 01:29:03 joerg Exp $ # # PROVIDE: dhclient # REQUIRE: netif mountcritlocal # BEFORE: NETWORKING # KEYWORD: DragonFly # # Note that there no syslog logging of dhclient messages at boot because # dhclient needs to start before services that syslog depends upon do. # . /etc/rc.subr . /etc/network.subr name="dhclient" pidfile="/var/run/${name}.pid" rcvar= start_precmd="dhclient_prestart" start_postcmd="dhclient_poststart" stop_cmd="dhclient_stop" stop_precmd="dhclient_prestop" stop_postcmd="dhclient_poststop" dhclient_common() { dhcp_list="`list_net_interfaces dhcp`" if [ -z "$dhcp_list" ]; then return $RC_IRRELEVANT fi # Determine the scope of the command # _cooked_list="$dhcp_list" if [ -n "$_cmdifn" ]; then eval _cooked_list=\"`expr "$dhcp_list" : ".*\($_cmdifn\).*"`\" if [ -z "$_cooked_list" ]; then err "No such network interface: $_cmdifn" return 1 fi fi } dhclient_prestart() { dhclient_common || return $? for ifn in ${_cooked_list}; do ifscript_up ${ifn} done rc_flags="${rc_flags} ${_cooked_list}" return 0 } dhclient_poststart() { for ifn in ${_cooked_list}; do ifalias_up ${ifn} ipx_up ${ifn} ifconfig ${ifn} done } dhclient_stop() { echo -n "Releasing DHCP leases:" for ifn in $_cooked_list ; do ${command} -r $ifn if [ $? -eq 0 ]; then echo -n " $ifn" else _fail="$_fail $ifn" fi done echo '.' debug "The following leases failed to release: $_fail" } dhclient_prestop() { dhclient_common || return $? for ifn in ${_cooked_list}; do ipx_down ${ifn} ifalias_down ${ifn} done } dhclient_poststop() { for ifn in ${_cooked_list}; do ifscript_down ${ifn} done } if [ -n "$2" ]; then _cmdifn="$2" fi load_rc_config $name run_rc_command "$1"