diff --git a/nixos/modules/tasks/network-interfaces-scripted.nix b/nixos/modules/tasks/network-interfaces-scripted.nix index fe6f6e5a1cb8..4bf274d4157f 100644 --- a/nixos/modules/tasks/network-interfaces-scripted.nix +++ b/nixos/modules/tasks/network-interfaces-scripted.nix @@ -241,6 +241,7 @@ let ++ optional config.boot.isContainer "network.target" ++ optional (isDefaultGateway4 || isDefaultGateway6) "network-online.target"; bindsTo = deviceDependency i.name; + partOf = [ "networking-scripted.target" ]; after = [ "network-pre.target" ] @@ -329,6 +330,7 @@ let nameValuePair "${i.name}-netdev" { description = "Virtual Network Interface ${i.name}"; bindsTo = optional (!config.boot.isContainer) "dev-net-tun.device"; + partOf = [ "networking-scripted.target" ]; after = optional (!config.boot.isContainer) "dev-net-tun.device" ++ [ "network-pre.target" ]; wantedBy = [ "network.target" @@ -363,7 +365,10 @@ let (subsystemDevice n) ]; bindsTo = deps ++ optional v.rstp "mstpd.service"; - partOf = [ "network.target" ] + partOf = [ + "network.target" + "networking-scripted.target" + ] ++ optional v.rstp "mstpd.service"; after = [ "network-pre.target" @@ -469,7 +474,10 @@ let ] ++ internalConfigs; before = [ "network.target" ] ++ internalConfigs; - partOf = [ "network.target" ]; # shutdown the bridge when network is shutdown + partOf = [ + "network.target" + "networking-scripted.target" + ]; # shutdown the bridge when network is shutdown bindsTo = [ "ovs-vswitchd.service" ]; # requires ovs-vswitchd to be alive at all times after = [ "network-pre.target" @@ -537,6 +545,7 @@ let (subsystemDevice n) ]; bindsTo = deps; + partOf = [ "networking-scripted.target" ]; after = [ "network-pre.target" ] ++ deps ++ map (i: "network-addresses-${i}.service") v.interfaces; before = [ "network.target" ]; serviceConfig.Type = "oneshot"; @@ -585,6 +594,7 @@ let (subsystemDevice n) ]; bindsTo = deps; + partOf = [ "networking-scripted.target" ]; after = [ "network-pre.target" ] ++ deps; before = [ "network.target" ]; serviceConfig.Type = "oneshot"; @@ -661,6 +671,7 @@ let (subsystemDevice n) ]; bindsTo = deps; + partOf = [ "networking-scripted.target" ]; after = [ "network-pre.target" ] ++ deps; before = [ "network.target" ]; serviceConfig.Type = "oneshot"; @@ -732,6 +743,7 @@ let (subsystemDevice n) ]; bindsTo = deps; + partOf = [ "networking-scripted.target" ]; after = [ "network-pre.target" ] ++ deps; before = [ "network.target" ]; serviceConfig.Type = "oneshot"; @@ -779,6 +791,7 @@ let (subsystemDevice n) ]; bindsTo = deps; + partOf = [ "networking-scripted.target" ]; after = [ "network-pre.target" ] ++ deps; before = [ "network.target" ]; serviceConfig.Type = "oneshot"; @@ -813,7 +826,10 @@ let (subsystemDevice n) ]; bindsTo = deps; - partOf = [ "network.target" ]; + partOf = [ + "network.target" + "networking-scripted.target" + ]; after = [ "network-pre.target" ] ++ deps; before = [ "network.target" ]; serviceConfig.Type = "oneshot"; @@ -865,6 +881,13 @@ let # to multi-user.target, this has the same result. systemd.targets.network.wantedBy = [ "multi-user.target" ]; + # This target serves no purpose during the boot, but can be + # used to quickly reset the network configuration by running + # systemctl restart networking-scripted.target + systemd.targets.networking-scripted = { + description = "NixOS scripted networking setup"; + }; + services.udev.extraRules = '' KERNEL=="tun", TAG+="systemd" '';