Skip to content

Commit

Permalink
Merge pull request NixOS#209506 from Izorkin/update-dhcpcd-exit-hook
Browse files Browse the repository at this point in the history
nixos/dhcpcd: optimize exitHook
  • Loading branch information
SuperSandro2000 authored Feb 27, 2024
2 parents 3beaece + 1293f04 commit f9477e3
Showing 1 changed file with 19 additions and 13 deletions.
32 changes: 19 additions & 13 deletions nixos/modules/services/networking/dhcpcd.nix
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ let
enableDHCP = config.networking.dhcpcd.enable &&
(config.networking.useDHCP || any (i: i.useDHCP == true) interfaces);

enableNTPService = (config.services.ntp.enable || config.services.ntpd-rs.enable || config.services.openntpd.enable || config.services.chrony.enable);

# Don't start dhcpcd on explicitly configured interfaces or on
# interfaces that are part of a bridge, bond or sit device.
ignoredInterfaces =
Expand Down Expand Up @@ -89,20 +91,22 @@ let
${cfg.extraConfig}
'';

exitHook = pkgs.writeText "dhcpcd.exit-hook"
''
exitHook = pkgs.writeText "dhcpcd.exit-hook" ''
${optionalString enableNTPService ''
if [ "$reason" = BOUND -o "$reason" = REBOOT ]; then
# Restart ntpd. 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. This also
# applies to openntpd.
/run/current-system/systemd/bin/systemctl try-reload-or-restart ntpd.service openntpd.service chronyd.service ntpd-rs.service || true
# Restart ntpd. 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. This also applies to openntpd.
${optionalString config.services.ntp.enable "/run/current-system/systemd/bin/systemctl try-reload-or-restart ntpd.service || true"}
${optionalString config.services.ntpd-rs.enable "/run/current-system/systemd/bin/systemctl try-reload-or-restart ntpd-rs.service || true"}
${optionalString config.services.openntpd.enable "/run/current-system/systemd/bin/systemctl try-reload-or-restart openntpd.service || true"}
${optionalString config.services.chrony.enable "/run/current-system/systemd/bin/systemctl try-reload-or-restart chronyd.service || true"}
fi
''}
${cfg.runHook}
'';
${cfg.runHook}
'';

in

Expand Down Expand Up @@ -232,7 +236,7 @@ in
wants = [ "network.target" ];
before = [ "network-online.target" ];

restartTriggers = [ exitHook ];
restartTriggers = optional (enableNTPService || cfg.runHook != "") [ exitHook ];

# Stopping dhcpcd during a reconfiguration is undesirable
# because it brings down the network interfaces configured by
Expand Down Expand Up @@ -261,7 +265,9 @@ in

environment.systemPackages = [ dhcpcd ];

environment.etc."dhcpcd.exit-hook".source = exitHook;
environment.etc."dhcpcd.exit-hook" = mkIf (enableNTPService || cfg.runHook != "") {
source = exitHook;
};

powerManagement.resumeCommands = mkIf config.systemd.services.dhcpcd.enable
''
Expand Down

0 comments on commit f9477e3

Please sign in to comment.