2007-02-22 15:26:53 +01:00
|
|
|
{dhcp, nettools, interfaces, lib}:
|
|
|
|
|
|
|
|
let
|
|
|
|
|
|
|
|
# Don't start dhclient on explicitly configured interfaces.
|
|
|
|
ignoredInterfaces = ["lo"] ++
|
|
|
|
map (i: i.name) (lib.filter (i: i ? ipAddress) interfaces);
|
|
|
|
|
2007-03-20 12:04:45 +01:00
|
|
|
stateDir = "/var/lib/dhcp"; # Don't use /var/state/dhcp; not FHS-compliant.
|
|
|
|
|
2007-02-22 15:26:53 +01:00
|
|
|
in
|
2006-11-19 23:05:49 +01:00
|
|
|
|
|
|
|
{
|
|
|
|
name = "dhclient";
|
|
|
|
|
|
|
|
job = "
|
|
|
|
description \"DHCP client\"
|
|
|
|
|
2006-11-20 18:28:08 +01:00
|
|
|
start on network-interfaces/started
|
2006-11-20 18:06:44 +01:00
|
|
|
stop on network-interfaces/stop
|
2006-11-19 23:05:49 +01:00
|
|
|
|
2007-02-20 15:20:33 +01:00
|
|
|
env PATH_DHCLIENT_SCRIPT=${dhcp}/sbin/dhclient-script
|
|
|
|
|
2006-11-19 23:05:49 +01:00
|
|
|
script
|
2007-02-20 15:59:29 +01:00
|
|
|
export PATH=${nettools}/sbin:$PATH
|
|
|
|
|
2006-11-24 17:31:01 +01:00
|
|
|
# Determine the interface on which to start dhclient.
|
2006-11-19 23:05:49 +01:00
|
|
|
interfaces=
|
2006-11-24 17:31:01 +01:00
|
|
|
|
2007-02-22 15:06:15 +01:00
|
|
|
for i in $(cd /sys/class/net && ls -d *); do
|
2007-02-22 15:26:53 +01:00
|
|
|
if ! for j in ${toString ignoredInterfaces}; do echo $j; done | grep -F -x -q \"$i\"; then
|
2007-02-22 15:06:15 +01:00
|
|
|
echo \"Running dhclient on $i\"
|
2006-11-19 23:05:49 +01:00
|
|
|
interfaces=\"$interfaces $i\"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
if test -z \"$interfaces\"; then
|
|
|
|
echo 'No interfaces on which to start dhclient!'
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2007-03-20 12:04:45 +01:00
|
|
|
mkdir -m 755 -p ${stateDir}
|
2006-11-24 17:38:22 +01:00
|
|
|
|
2007-03-20 12:04:45 +01:00
|
|
|
exec ${dhcp}/sbin/dhclient -d $interfaces -e \"PATH=$PATH\" -lf ${stateDir}/dhclient.leases
|
2006-11-19 23:05:49 +01:00
|
|
|
end script
|
|
|
|
";
|
|
|
|
|
|
|
|
}
|