1#!/bin/sh 2# 3# $NetBSD: dhclient,v 1.8 2002/03/22 04:33:58 thorpej Exp $ 4# $FreeBSD: src/etc/rc.d/dhclient,v 1.6 2003/06/29 05:34:41 mtm Exp $ 5# $DragonFly: src/etc/rc.d/dhclient,v 1.6 2005/07/25 01:29:03 joerg Exp $ 6# 7 8# PROVIDE: dhclient 9# REQUIRE: netif mountcritlocal 10# BEFORE: NETWORKING 11# KEYWORD: DragonFly 12# 13# Note that there no syslog logging of dhclient messages at boot because 14# dhclient needs to start before services that syslog depends upon do. 15# 16 17. /etc/rc.subr 18. /etc/network.subr 19 20name="dhclient" 21pidfile="/var/run/${name}.pid" 22 rcvar= 23 start_precmd="dhclient_prestart" 24 start_postcmd="dhclient_poststart" 25 stop_cmd="dhclient_stop" 26 stop_precmd="dhclient_prestop" 27 stop_postcmd="dhclient_poststop" 28 29 30dhclient_common() 31{ 32 dhcp_list="`list_net_interfaces dhcp`" 33 if [ -z "$dhcp_list" ]; then 34 return $RC_IRRELEVANT 35 fi 36 37 # Determine the scope of the command 38 # 39 _cooked_list="$dhcp_list" 40 if [ -n "$_cmdifn" ]; then 41 eval _cooked_list=\"`expr "$dhcp_list" : ".*\($_cmdifn\).*"`\" 42 if [ -z "$_cooked_list" ]; then 43 err "No such network interface: $_cmdifn" 44 return 1 45 fi 46 fi 47} 48 49dhclient_prestart() 50{ 51 dhclient_common || return $? 52 53 for ifn in ${_cooked_list}; do 54 ifscript_up ${ifn} 55 done 56 57 rc_flags="${rc_flags} ${_cooked_list}" 58 return 0 59} 60 61dhclient_poststart() 62{ 63 for ifn in ${_cooked_list}; do 64 ifalias_up ${ifn} 65 ipx_up ${ifn} 66 ifconfig ${ifn} 67 done 68} 69 70dhclient_stop() 71{ 72 echo -n "Releasing DHCP leases:" 73 for ifn in $_cooked_list ; do 74 ${command} -r $ifn 75 if [ $? -eq 0 ]; then 76 echo -n " $ifn" 77 else 78 _fail="$_fail $ifn" 79 fi 80 done 81 echo '.' 82 debug "The following leases failed to release: $_fail" 83} 84 85dhclient_prestop() 86{ 87 dhclient_common || return $? 88 89 for ifn in ${_cooked_list}; do 90 ipx_down ${ifn} 91 ifalias_down ${ifn} 92 done 93} 94 95dhclient_poststop() 96{ 97 for ifn in ${_cooked_list}; do 98 ifscript_down ${ifn} 99 done 100} 101 102if [ -n "$2" ]; then 103 _cmdifn="$2" 104fi 105 106load_rc_config $name 107 108run_rc_command "$1" 109