d987b16112
svn path=/nixos/trunk/; revision=9856
50 lines
949 B
Nix
50 lines
949 B
Nix
{pkgs, config}:
|
|
|
|
let
|
|
|
|
cfg = config.services.dhcpd;
|
|
|
|
stateDir = "/var/lib/dhcp"; # Don't use /var/state/dhcp; not FHS-compliant.
|
|
|
|
machines = pkgs.lib.concatStrings (map (machine: "
|
|
host ${machine.hostName} {
|
|
hardware ethernet ${machine.ethernetAddress};
|
|
fixed-address ${machine.ipAddress};
|
|
}
|
|
") cfg.machines);
|
|
|
|
configFile = if cfg.configFile != null then cfg.configFile else pkgs.writeText "dhcpd.conf" "
|
|
default-lease-time 600;
|
|
max-lease-time 7200;
|
|
authoritative;
|
|
ddns-update-style ad-hoc;
|
|
${cfg.extraConfig}
|
|
${machines}
|
|
";
|
|
|
|
in
|
|
|
|
{
|
|
name = "dhcpd";
|
|
|
|
job = "
|
|
description \"DHCP server\"
|
|
|
|
start on network-interfaces/started
|
|
stop on network-interfaces/stop
|
|
|
|
script
|
|
|
|
mkdir -m 755 -p ${stateDir}
|
|
|
|
touch ${stateDir}/dhcpd.leases
|
|
|
|
exec ${pkgs.dhcp}/sbin/dhcpd -f -cf ${configFile} \\
|
|
-lf ${stateDir}/dhcpd.leases \\
|
|
${toString cfg.interfaces}
|
|
|
|
end script
|
|
";
|
|
|
|
}
|