freebsd-skq/etc/rc.d/dhclient
Mike Makonnen 312ba8d00a When stopping a dhcp interface, don't just release the lease on
the address, also kill the dhclient process. Instead of doing the
release in the stop command, move it to the precmd stage and allow
rc.subr(8) to automatically kill the dhclient process by leaving the
stop command undefined.

Noticed by:	mbr
2003-07-26 18:50:53 +00:00

109 lines
1.8 KiB
Bash
Executable File

#!/bin/sh
#
# $NetBSD: dhclient,v 1.8 2002/03/22 04:33:58 thorpej Exp $
# $FreeBSD$
#
# PROVIDE: dhclient
# REQUIRE: network netif mountcritlocal
# BEFORE: NETWORKING
# KEYWORD: FreeBSD NetBSD
#
# 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"
case "${OSTYPE}" in
FreeBSD)
rcvar=
start_precmd="dhclient_prestart"
start_postcmd="dhclient_poststart"
stop_precmd="dhclient_prestop"
stop_postcmd="dhclient_poststop"
;;
NetBSD)
rcvar=$name
command="/sbin/${name}"
;;
esac
dhclient_common()
{
dhcp_list="`list_net_interfaces dhcp`"
if [ -z "$dhcp_list" ]; then
return 1
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 1
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_prestop()
{
dhclient_common || return 1
for ifn in ${_cooked_list}; do
ipx_down ${ifn}
ifalias_down ${ifn}
done
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_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"