9dd7891820
svn path=/nixos/trunk/; revision=9785
101 lines
2.9 KiB
Nix
101 lines
2.9 KiB
Nix
{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
|
|
|
|
";
|
|
|
|
}
|