Skip to content

Commit

Permalink
nixos/networking: network is online if default gw set
Browse files Browse the repository at this point in the history
Previously services depending on network-online.target would wait until
dhcpcd times out if it was enabled and a static network address
configuration was used. Setting the default gateway statically is enough
for the networking to be considered online.

This also adjusts the relevant networking tests to wait for
network-online.target instead of just network.target.
  • Loading branch information
fpletz committed Sep 18, 2017
1 parent a40533f commit b179908
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 5 deletions.
8 changes: 6 additions & 2 deletions nixos/modules/services/networking/dhcpcd.nix
Expand Up @@ -153,10 +153,14 @@ in

config = mkIf enableDHCP {

systemd.services.dhcpcd =
systemd.services.dhcpcd = let
cfgN = config.networking;
hasDefaultGatewaySet = (cfgN.defaultGateway != null && cfgN.defaultGateway.address != "")
|| (cfgN.defaultGateway6 != null && cfgN.defaultGateway6.address != "");
in
{ description = "DHCP Client";

wantedBy = [ "network-online.target" ];
wantedBy = optional (!hasDefaultGatewaySet) "network-online.target";
after = [ "network.target" ];
wants = [ "network.target" ];

Expand Down
5 changes: 4 additions & 1 deletion nixos/modules/tasks/network-interfaces-scripted.nix
Expand Up @@ -73,6 +73,9 @@ let
then [ "${dev}-netdev.service" ]
else optional (dev != null && dev != "lo" && !config.boot.isContainer) (subsystemDevice dev);

hasDefaultGatewaySet = (cfg.defaultGateway != null && cfg.defaultGateway.address != "")
|| (cfg.defaultGateway6 != null && cfg.defaultGateway6.address != "");

networkLocalCommands = {
after = [ "network-setup.service" ];
bindsTo = [ "network-setup.service" ];
Expand All @@ -85,7 +88,7 @@ let
before = [ "network.target" "shutdown.target" ];
wants = [ "network.target" ];
conflicts = [ "shutdown.target" ];
wantedBy = [ "multi-user.target" ];
wantedBy = [ "multi-user.target" ] ++ optional hasDefaultGatewaySet "network-online.target";

unitConfig.ConditionCapability = "CAP_NET_ADMIN";

Expand Down
4 changes: 2 additions & 2 deletions nixos/tests/networking.nix
Expand Up @@ -105,7 +105,7 @@ let
startAll;
$client->waitForUnit("network.target");
$router->waitForUnit("network.target");
$router->waitForUnit("network-online.target");
# Make sure dhcpcd is not started
$client->fail("systemctl status dhcpcd.service");
Expand Down Expand Up @@ -157,7 +157,7 @@ let
startAll;
$client->waitForUnit("network.target");
$router->waitForUnit("network.target");
$router->waitForUnit("network-online.target");
# Wait until we have an ip address on each interface
$client->waitUntilSucceeds("ip addr show dev eth1 | grep -q '192.168.1'");
Expand Down

0 comments on commit b179908

Please sign in to comment.