0
0
Fork 0
mirror of https://github.com/NixOS/nixpkgs.git synced 2025-07-14 22:20:30 +03:00
nixpkgs/nixos/tests/systemd-initrd-bridge.nix
Jared Baur b3e86dc1e9
nixosTests.systemd-initrd.bridge: fix failing test
Since slave interfaces of a bridge cannot be assigned IP addresses, we
must prevent IPs from being assigned to them via the test framework
modules. Since c6f6c28218, all nodes get
ipv6 addresses by default, so we must ensure IP addresses of any type
don't get assigned to the bridge slave interfaces.
2025-07-06 21:46:33 -07:00

81 lines
2.2 KiB
Nix

{ lib, ... }:
{
name = "systemd-initrd-bridge";
meta.maintainers = [ lib.maintainers.majiir ];
# Tests bridge interface configuration in systemd-initrd.
#
# The 'a' and 'b' nodes are connected to a 'bridge' node through different
# links. The 'bridge' node configures a bridge across them. It waits forever
# in initrd (stage 1) with networking enabled. 'a' and 'b' ping 'bridge' to
# test connectivity with the bridge interface. Then, 'a' pings 'b' to test
# the bridge itself.
nodes = {
bridge =
{ config, lib, ... }:
{
boot.initrd.systemd.enable = true;
boot.initrd.network.enable = true;
boot.initrd.systemd.services.boot-blocker = {
before = [ "initrd.target" ];
wantedBy = [ "initrd.target" ];
script = "sleep infinity";
serviceConfig.Type = "oneshot";
};
networking.primaryIPAddress = lib.mkForce "192.168.1.${toString config.virtualisation.test.nodeNumber}";
virtualisation.interfaces.eth1 = {
vlan = 1;
assignIP = false;
};
virtualisation.interfaces.eth2 = {
vlan = 2;
assignIP = false;
};
networking.bridges.br0.interfaces = [
"eth1"
"eth2"
];
networking.interfaces = {
br0.ipv4.addresses = [
{
address = config.networking.primaryIPAddress;
prefixLength = 24;
}
];
};
};
a = {
virtualisation.vlans = [ 1 ];
};
b =
{ config, ... }:
{
virtualisation.vlans = [ 2 ];
networking.primaryIPAddress = lib.mkForce "192.168.1.${toString config.virtualisation.test.nodeNumber}";
networking.interfaces.eth1.ipv4.addresses = lib.mkForce [
{
address = config.networking.primaryIPAddress;
prefixLength = 24;
}
];
};
};
testScript = ''
start_all()
a.wait_for_unit("network.target")
b.wait_for_unit("network.target")
a.succeed("ping -n -w 10 -c 1 bridge >&2")
b.succeed("ping -n -w 10 -c 1 bridge >&2")
a.succeed("ping -n -w 10 -c 1 b >&2")
'';
}