nixos/networkd: respect systemd.network.links also with disabled systemd-networkd
This mirrors the behaviour of systemd - It's udev that parses `.link` files, not `systemd-networkd`.
This commit is contained in:
parent
1115959a8d
commit
36ef112a47
|
@ -712,6 +712,14 @@ auth required pam_succeed_if.so uid >= 1000 quiet
|
||||||
For further reference, please read <link xlink:href="https://github.com/NixOS/nixpkgs/pull/68953">#68953</link> or the corresponding <link xlink:href="https://discourse.nixos.org/t/predictable-network-interface-names-in-initrd/4055">discourse thread</link>.
|
For further reference, please read <link xlink:href="https://github.com/NixOS/nixpkgs/pull/68953">#68953</link> or the corresponding <link xlink:href="https://discourse.nixos.org/t/predictable-network-interface-names-in-initrd/4055">discourse thread</link>.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The <link linkend="opt-systemd.network.links">systemd.network.links</link> option is now respected
|
||||||
|
even when <link linkend="opt-systemd.network.enable">systemd-networkd</command> is disabled.
|
||||||
|
This mirrors the behaviour of systemd - It's udev that parses <literal>.link</literal> files,
|
||||||
|
not <command>systemd-networkd</command>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
@ -355,6 +355,14 @@ let
|
||||||
};
|
};
|
||||||
|
|
||||||
linkOptions = commonNetworkOptions // {
|
linkOptions = commonNetworkOptions // {
|
||||||
|
# overwrite enable option from above
|
||||||
|
enable = mkOption {
|
||||||
|
default = true;
|
||||||
|
type = types.bool;
|
||||||
|
description = ''
|
||||||
|
Whether to enable this .link unit. It's handled by udev no matter if <command>systemd-networkd</command> is enabled or not
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
linkConfig = mkOption {
|
linkConfig = mkOption {
|
||||||
default = {};
|
default = {};
|
||||||
|
@ -1045,7 +1053,14 @@ in
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf config.systemd.network.enable {
|
config = mkMerge [
|
||||||
|
# .link units are honored by udev, no matter if systemd-networkd is enabled or not.
|
||||||
|
{
|
||||||
|
systemd.network.units = mapAttrs' (n: v: nameValuePair "${n}.link" (linkToUnit n v)) cfg.links;
|
||||||
|
environment.etc = unitFiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
(mkIf config.systemd.network.enable {
|
||||||
|
|
||||||
users.users.systemd-network.group = "systemd-network";
|
users.users.systemd-network.group = "systemd-network";
|
||||||
|
|
||||||
|
@ -1053,12 +1068,9 @@ in
|
||||||
"systemd-networkd.service" "systemd-networkd-wait-online.service"
|
"systemd-networkd.service" "systemd-networkd-wait-online.service"
|
||||||
];
|
];
|
||||||
|
|
||||||
systemd.network.units = mapAttrs' (n: v: nameValuePair "${n}.link" (linkToUnit n v)) cfg.links
|
systemd.network.units = mapAttrs' (n: v: nameValuePair "${n}.netdev" (netdevToUnit n v)) cfg.netdevs
|
||||||
// mapAttrs' (n: v: nameValuePair "${n}.netdev" (netdevToUnit n v)) cfg.netdevs
|
|
||||||
// mapAttrs' (n: v: nameValuePair "${n}.network" (networkToUnit n v)) cfg.networks;
|
// mapAttrs' (n: v: nameValuePair "${n}.network" (networkToUnit n v)) cfg.networks;
|
||||||
|
|
||||||
environment.etc = unitFiles;
|
|
||||||
|
|
||||||
systemd.services.systemd-networkd = {
|
systemd.services.systemd-networkd = {
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
restartTriggers = attrNames unitFiles;
|
restartTriggers = attrNames unitFiles;
|
||||||
|
@ -1084,5 +1096,6 @@ in
|
||||||
};
|
};
|
||||||
|
|
||||||
services.resolved.enable = mkDefault true;
|
services.resolved.enable = mkDefault true;
|
||||||
};
|
})
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -654,6 +654,31 @@ let
|
||||||
), "The IPv6 routing table has not been properly cleaned:\n{}".format(ipv6Residue)
|
), "The IPv6 routing table has not been properly cleaned:\n{}".format(ipv6Residue)
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
# even with disabled networkd, systemd.network.links should work
|
||||||
|
# (as it's handled by udev, not networkd)
|
||||||
|
link = {
|
||||||
|
name = "Link";
|
||||||
|
nodes.client = { pkgs, ... }: {
|
||||||
|
virtualisation.vlans = [ 1 ];
|
||||||
|
networking = {
|
||||||
|
useNetworkd = networkd;
|
||||||
|
useDHCP = false;
|
||||||
|
};
|
||||||
|
systemd.network.links."50-foo" = {
|
||||||
|
matchConfig = {
|
||||||
|
Name = "foo";
|
||||||
|
Driver = "dummy";
|
||||||
|
};
|
||||||
|
linkConfig.MTUBytes = "1442";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
testScript = ''
|
||||||
|
print(client.succeed("ip l add name foo type dummy"))
|
||||||
|
print(client.succeed("stat /etc/systemd/network/50-foo.link"))
|
||||||
|
client.succeed("udevadm settle")
|
||||||
|
assert "mtu 1442" in client.succeed("ip l show dummy0")
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
in pkgs.lib.mapAttrs (pkgs.lib.const (attrs: makeTest (attrs // {
|
in pkgs.lib.mapAttrs (pkgs.lib.const (attrs: makeTest (attrs // {
|
||||||
|
|
Loading…
Reference in New Issue