f9ef847419
network interfaces could only be turned on and off as a group (all static interfaces or all dhcp interfaces). When used to start the interface a 'long form' ifconfig output is used to show the status of the interface, but when stopping an interface the script will simply output the name of the interface. This is simply my personal preference. Hopefully as this functionality matures we can stabilize on a prefered form of output for these scripts. A stop command to the dhclient script now explicitly releases the dhcp lease. Behaviour at system shutdown; however, is unchanged since dhclient is not, by default, run at that time. The client will not release its lease at shutdown.
114 lines
1.8 KiB
Bash
Executable File
114 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_cmd="dhclient_stop"
|
|
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_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 1
|
|
|
|
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"
|