diff options
Diffstat (limited to 'net/dhcpcd.sh')
-rw-r--r-- | net/dhcpcd.sh | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/net/dhcpcd.sh b/net/dhcpcd.sh new file mode 100644 index 00000000..f90f3336 --- /dev/null +++ b/net/dhcpcd.sh @@ -0,0 +1,71 @@ +# Copyright 2004-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +dhcpcd_depend() { + after interface + program start /sbin/dhcpcd + provide dhcp + + # We prefer dhcpcd over the others + after dhclient pump udhcpc +} + +_config_vars="$_config_vars dhcp dhcpcd" + +dhcpcd_start() { + local args= opt= opts= pidfile="/var/run/dhcpcd-${IFACE}.pid" + + _wait_for_carrier || return 1 + + eval args=\$dhcpcd_${IFVAR} + + # Get our options + eval opts=\$dhcp_${IFVAR} + [ -z "${opts}" ] && opts=${dhcp} + + # Map some generic options to dhcpcd + for opt in ${opts} ; do + case "${opt}" in + nodns) args="${args} -R" ;; + nontp) args="${args} -N" ;; + nonis) args="${args} -Y" ;; + nogateway) args="${args} -G" ;; + nosendhost) args="${args} -h ''"; + esac + done + + # Add our route metric + [ "${metric:-0}" != "0" ] && args="${args} -m ${metric}" + + # Bring up DHCP for this interface + ebegin "Running dhcpcd" + + eval /sbin/dhcpcd "${args}" "${IFACE}" + eend $? || return 1 + + _show_address + return 0 +} + +dhcpcd_stop() { + local pidfile="/var/run/dhcpcd-${IFACE}.pid" opts= + [ ! -f "${pidfile}" ] && return 0 + + # Get our options + if [ -x /sbin/dhcpcd ] ; then + eval opts=\$dhcp_${IFVAR} + [ -z "${opts}" ] && opts=${dhcp} + fi + + ebegin "Stopping dhcpcd on ${IFACE}" + case " ${opts} " in + *" release "*) dhcpcd -k "${IFACE}" ;; + *) + start-stop-daemon --stop --quiet \ + --exec /sbin/dhcpcd --pidfile "${pidfile}" + ;; + esac + eend $? +} + +# vim: set ts=4 : |