Author: eelco
Date: Mon Feb 20 01:17:53 2012
New Revision: 32413
URL: https://nixos.org/websvn/nix/?rev=32413&sc=1
Log:
* Added a module for dhcpcd, a DHCP client (not enabled by default
yet). It's smaller than dhclient and has more features
(e.g. automatically detects link status changes, supports
openresolv, does IPv4LL, and supports IPv6 Router Advertisements).
Added:
nixos/trunk/modules/services/networking/dhcpcd.nix
- copied, changed from r32409,
nixos/trunk/modules/services/networking/dhclient.nix
Copied and modified: nixos/trunk/modules/services/networking/dhcpcd.nix (from
r32409, nixos/trunk/modules/services/networking/dhclient.nix)
==============================================================================
--- nixos/trunk/modules/services/networking/dhclient.nix Sun Feb 19
22:53:25 2012 (r32409, copy source)
+++ nixos/trunk/modules/services/networking/dhcpcd.nix Mon Feb 20 01:17:53
2012 (r32413)
@@ -4,38 +4,14 @@
let
- inherit (pkgs) nettools dhcp lib;
+ inherit (pkgs) dhcpcd;
# Don't start dhclient on explicitly configured interfaces or on
# interfaces that are part of a bridge.
ignoredInterfaces =
- map (i: i.name) (lib.filter (i: i ? ipAddress && i.ipAddress != "" )
config.networking.interfaces)
+ map (i: i.name) (filter (i: i ? ipAddress && i.ipAddress != "" )
config.networking.interfaces)
++ concatLists (attrValues (mapAttrs (n: v: v.interfaces)
config.networking.bridges));
- stateDir = "/var/lib/dhcp"; # Don't use /var/state/dhcp; not FHS-compliant.
-
- dhclientExitHooks = pkgs.writeText "dhclient-exit-hooks"
- ''
- #echo "$reason" >> /tmp/dhcp-exit
- #echo "$exit_status" >> /tmp/dhcp-exit
-
- if test "$reason" = BOUND -o "$reason" = REBOOT; then
- # Restart ntpd. (The "ip-up" event below will trigger the
- # restart.) We need to restart it to make sure that it will
- # actually do something: if ntpd cannot resolve the server
- # hostnames in its config file, then it will never do
- # anything ever again ("couldn't resolve ..., giving up on
- # it"), so we silently lose time synchronisation.
- ${config.system.build.upstart}/sbin/initctl stop ntpd
-
- ${config.system.build.upstart}/sbin/initctl emit -n ip-up
- fi
-
- if test "$reason" = EXPIRE -o "$reason" = RELEASE; then
- ${config.system.build.upstart}/sbin/initctl emit -n ip-down
- fi
- '';
-
in
{
@@ -61,25 +37,19 @@
config = mkIf config.networking.useDHCP {
- jobs.dhclient =
+ jobs.dhcpcd =
{ startOn = "started network-interfaces";
stopOn = "stopping network-interfaces";
- path = [ dhcp ];
-
- preStart =
- ''
- # dhclient barfs if /proc/net/if_inet6 doesn't exist.
- ${config.system.sbin.modprobe}/sbin/modprobe ipv6 || true
- '';
+ path = [ dhcpcd pkgs.nettools pkgs.openresolv ];
script =
''
- # Determine the interface on which to start dhclient.
+ # Determine the interface on which to start dhcpcd.
interfaces=
for i in $(cd /sys/class/net && ls -d *); do
- # Only run dhclient on interfaces of type ARPHRD_ETHER
+ # Only run dhcpcd on interfaces of type ARPHRD_ETHER
# (1), i.e. Ethernet. Ignore peth* devices; on Xen,
# they're renamed physical Ethernet cards used for
# bridging. Likewise for vif* and tap* (Xen) and
@@ -88,41 +58,32 @@
if ! for j in ${toString ignoredInterfaces}; do echo $j;
done | grep -F -x -q "$i" &&
! echo "$i" | grep -x -q
"peth.*\|vif.*\|tap.*\|virbr.*\|vnet.*";
then
- echo "Running dhclient on $i"
+ echo "Running dhcpcd on $i"
interfaces="$interfaces $i"
fi
fi
done
- if test -z "$interfaces"; then
- echo 'No interfaces on which to start dhclient!'
+ if [ -z "$interfaces" ]; then
+ echo 'No interfaces on which to start dhcpcd!'
exit 1
fi
- mkdir -m 755 -p ${stateDir}
-
- exec dhclient -d $interfaces -e "PATH=$PATH" -lf
${stateDir}/dhclient.leases -sf ${dhcp}/sbin/dhclient-script
+ exec dhcpcd --nobackground --persistent $interfaces
'';
};
- environment.systemPackages = [dhcp];
-
- environment.etc =
- [ # Dhclient hooks for emitting ip-up/ip-down events.
- { source = dhclientExitHooks;
- target = "dhclient-exit-hooks";
- }
- ];
+ environment.systemPackages = [ dhcpcd ];
powerManagement.resumeCommands =
''
- ${config.system.build.upstart}/sbin/restart dhclient
+ ${config.system.build.upstart}/sbin/restart dhcpcd
'';
networking.interfaceMonitor.commands =
''
if [ "$status" = up ]; then
- ${config.system.build.upstart}/sbin/restart dhclient
+ ${config.system.build.upstart}/sbin/restart dhcpcd
fi
'';
_______________________________________________
nix-commits mailing list
[email protected]
http://lists.science.uu.nl/mailman/listinfo/nix-commits