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