nixpkgs-suyu/upstart-jobs/network-interfaces.nix

102 lines
2.9 KiB
Nix
Raw Normal View History

{nettools, modprobe, wirelesstools, bash, writeText, config}:
let
cfg = config.networking;
# !!! use XML
names = map (i: i.name) cfg.interfaces;
ipAddresses = map (i: if i ? ipAddress then i.ipAddress else "dhcp") cfg.interfaces;
subnetMasks = map (i: if i ? subnetMask then i.subnetMask else "default") cfg.interfaces;
essids = map (i: if i ? essid then i.essid else "default") cfg.interfaces;
wepKeys = map (i: if i ? wepKey then i.wepKey else "nokey") cfg.interfaces;
in
{
name = "network-interfaces";
job = "
start on hardware-scan
stop on shutdown
start script
export PATH=${modprobe}/sbin:$PATH
modprobe af_packet || true
for i in $(cd /sys/class/net && ls -d *); do
echo \"Bringing up network device $i...\"
${nettools}/sbin/ifconfig $i up || true
done
# Configure the manually specified interfaces.
names=(${toString names})
ipAddresses=(${toString ipAddresses})
subnetMasks=(${toString subnetMasks})
essids=(${toString essids})
wepKeys=(${toString wepKeys})
for ((n = 0; n < \${#names[*]}; n++)); do
name=\${names[$n]}
ipAddress=\${ipAddresses[$n]}
subnetMask=\${subnetMasks[$n]}
essid=\${essids[$n]}
wepKey=\${wepKeys[$n]}
# Set wireless networking stuff.
if test \"$essid\" != default; then
${wirelesstools}/sbin/iwconfig \"$name\" essid \"$essid\" || true
fi
if test \"$wepKey\" != nokey; then
${wirelesstools}/sbin/iwconfig \"$name\" key \"$(cat \"$wepKey\")\" || true
fi
# Set IP address / netmask.
if test \"$ipAddress\" != dhcp; then
echo \"Configuring interface $name...\"
extraFlags=
if test \"$subnetMask\" != default; then
extraFlags=\"$extraFlags netmask $subnetMask\"
fi
${nettools}/sbin/ifconfig \"$name\" \"$ipAddress\" $extraFlags || true
fi
done
# Set the nameservers.
if test -n \"${toString cfg.nameservers}\"; then
rm -f /etc/resolv.conf
if test -n \"${cfg.domain}\"; then
echo \"domain ${cfg.domain}\" >> /etc/resolv.conf
fi
for i in ${toString cfg.nameservers}; do
echo \"nameserver $i\" >> /etc/resolv.conf
done
fi
# Set the default gateway.
if test -n \"${cfg.defaultGateway}\"; then
${nettools}/sbin/route add default gw \"${cfg.defaultGateway}\" || true
fi
# Run any user-specified commands.
${bash}/bin/sh ${writeText "local-net-cmds" cfg.localCommands} || true
end script
# Hack: Upstart doesn't yet support what we want: a service that
# doesn't have a running process associated with it.
respawn sleep 100000
stop script
for i in $(cd /sys/class/net && ls -d *); do
echo \"Taking down network device $i...\"
${nettools}/sbin/ifconfig $i down || true
done
end script
";
}