mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-07-14 22:20:30 +03:00

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.
81 lines
2.2 KiB
Nix
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")
|
|
'';
|
|
}
|