blob: cd376aa3d5c276878dc5d13bdf080e98c490031c [file] [log] [blame]
#!/bin/sh
#
# Run dhclient, the system DHCP client, with the appropriate parameters for
# SpaceCast.
iface=$1
lock=/var/run/dhclient.$iface.lock
lockfile-create --use-pid $lock
kill_dhclient() {
for i in $(seq 1 10); do
# Send TERM to all matching processes.
pkill -f "$1"
# Break if all matching processes are killed.
pgrep -f "$1" || break
usleep 500000
done
# Send KILL to all lingering matching processes.
pkill -9 -f "$1"
}
run_dhclient() {
local suffix="$1" xargs="$2"
local pidfile="/var/run/dhclient$suffix.$iface.pid"
local leasefile="/var/run/dhclient$suffix.$iface.lease"
local conffile="/etc/dhclient$suffix.conf"
if [ -e "$pidfile" ]; then
# kill sends TERM which should make the babysitter exit gracefully.
kill $(cat "$pidfile") >/dev/null 2>&1
rm -f "$pidfile"
fi
babysit 60 dhclient "$iface" $xargs \
-d \
-pf "$pidfile" \
-lf "$leasefile" \
-cf "$conffile" \
2>&1 | logos "dhclient$suffix.$iface" &
}
# Kill all dhclient and babysit processes for $iface.
kill_dhclient "dhclient $iface -d"
run_dhclient "" ""
# -N -P means to request a delegated prefix AND get a address.
# -S means runs stateless config, requests only the extra information.
# On the network box we only run the stateful version, running both
# interfere with each other.
# TODO(erdi): Disable IPv6 until it is fully supported in App.
#run_dhclient "6" "-N -P -6 --never-gonna-give-you-up 900"
lockfile-remove $lock