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.1 2003/07/24 06:35:37 dillon Exp $ 6# 7 8# PROVIDE: dhclient 9# REQUIRE: network netif mountcritlocal 10# BEFORE: NETWORKING 11# KEYWORD: DragonFly FreeBSD NetBSD 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" 22case "${OSTYPE}" in 23DragonFly) 24 rcvar= 25 start_precmd="dhclient_prestart" 26 start_postcmd="dhclient_poststart" 27 stop_cmd="dhclient_stop" 28 stop_precmd="dhclient_prestop" 29 stop_postcmd="dhclient_poststop" 30 ;; 31 32FreeBSD) 33 rcvar= 34 start_precmd="dhclient_prestart" 35 start_postcmd="dhclient_poststart" 36 stop_cmd="dhclient_stop" 37 stop_precmd="dhclient_prestop" 38 stop_postcmd="dhclient_poststop" 39 ;; 40NetBSD) 41 rcvar=$name 42 command="/sbin/${name}" 43 ;; 44esac 45 46dhclient_common() 47{ 48 dhcp_list="`list_net_interfaces dhcp`" 49 if [ -z "$dhcp_list" ]; then 50 return 1 51 fi 52 53 # Determine the scope of the command 54 # 55 _cooked_list="$dhcp_list" 56 if [ -n "$_cmdifn" ]; then 57 eval _cooked_list=\"`expr "$dhcp_list" : ".*\($_cmdifn\).*"`\" 58 if [ -z "$_cooked_list" ]; then 59 err "No such network interface: $_cmdifn" 60 return 1 61 fi 62 fi 63} 64 65dhclient_prestart() 66{ 67 dhclient_common || return 1 68 69 for ifn in ${_cooked_list}; do 70 ifscript_up ${ifn} 71 done 72 73 rc_flags="${rc_flags} ${_cooked_list}" 74 return 0 75} 76 77dhclient_poststart() 78{ 79 for ifn in ${_cooked_list}; do 80 ifalias_up ${ifn} 81 ipx_up ${ifn} 82 ifconfig ${ifn} 83 done 84} 85 86dhclient_stop() 87{ 88 echo -n "Releasing DHCP leases:" 89 for ifn in $_cooked_list ; do 90 ${command} -r $ifn 91 if [ $? -eq 0 ]; then 92 echo -n " $ifn" 93 else 94 _fail="$_fail $ifn" 95 fi 96 done 97 echo '.' 98 debug "The following leases failed to release: $_fail" 99} 100 101dhclient_prestop() 102{ 103 dhclient_common || return 1 104 105 for ifn in ${_cooked_list}; do 106 ipx_down ${ifn} 107 ifalias_down ${ifn} 108 done 109} 110 111dhclient_poststop() 112{ 113 for ifn in ${_cooked_list}; do 114 ifscript_down ${ifn} 115 done 116} 117 118if [ -n "$2" ]; then 119 _cmdifn="$2" 120fi 121 122load_rc_config $name 123 124run_rc_command "$1" 125