nixos/networking: network is online if default gw set

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.
This commit is contained in:
Franz Pletz 2017-09-18 14:46:37 +02:00
parent a40533f70a
commit b179908414
No known key found for this signature in database
GPG key ID: 846FDED7792617B4
3 changed files with 12 additions and 5 deletions

View file

@ -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" ];

View file

@ -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" ];
@ -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";

View file

@ -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");
@ -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'");