at 24.11-pre 2.8 kB view raw
1/* This test ensures that we can configure spanning-tree protocol 2 across bridges using systemd-networkd. 3 4 Test topology: 5 6 1 2 3 7 node1 --- sw1 --- sw2 --- node2 8 \ / 9 4 \ / 5 10 sw3 11 | 12 6 | 13 | 14 node3 15 16 where switches 1, 2, and 3 bridge their links and use STP, 17 and each link is labeled with the VLAN we are assigning it in 18 virtualisation.vlans. 19*/ 20with builtins; 21let 22 commonConf = { 23 systemd.services.systemd-networkd.environment.SYSTEMD_LOG_LEVEL = "debug"; 24 networking.useNetworkd = true; 25 networking.useDHCP = false; 26 networking.firewall.enable = false; 27 }; 28 29 generateNodeConf = { octet, vlan }: 30 { lib, pkgs, config, ... }: { 31 imports = [ common/user-account.nix commonConf ]; 32 virtualisation.vlans = [ vlan ]; 33 systemd.network = { 34 enable = true; 35 networks = { 36 "30-eth" = { 37 matchConfig.Name = "eth1"; 38 address = [ "10.0.0.${toString octet}/24" ]; 39 }; 40 }; 41 }; 42 }; 43 44 generateSwitchConf = vlans: 45 { lib, pkgs, config, ... }: { 46 imports = [ common/user-account.nix commonConf ]; 47 virtualisation.vlans = vlans; 48 systemd.network = { 49 enable = true; 50 netdevs = { 51 "40-br0" = { 52 netdevConfig = { 53 Kind = "bridge"; 54 Name = "br0"; 55 }; 56 bridgeConfig.STP = "yes"; 57 }; 58 }; 59 networks = { 60 "30-eth" = { 61 matchConfig.Name = "eth*"; 62 networkConfig.Bridge = "br0"; 63 }; 64 "40-br0" = { matchConfig.Name = "br0"; }; 65 }; 66 }; 67 }; 68in import ./make-test-python.nix ({ pkgs, ... }: { 69 name = "networkd"; 70 meta = with pkgs.lib.maintainers; { maintainers = [ picnoir ]; }; 71 nodes = { 72 node1 = generateNodeConf { 73 octet = 1; 74 vlan = 1; 75 }; 76 node2 = generateNodeConf { 77 octet = 2; 78 vlan = 3; 79 }; 80 node3 = generateNodeConf { 81 octet = 3; 82 vlan = 6; 83 }; 84 sw1 = generateSwitchConf [ 1 2 4 ]; 85 sw2 = generateSwitchConf [ 2 3 5 ]; 86 sw3 = generateSwitchConf [ 4 5 6 ]; 87 }; 88 testScript = '' 89 network_nodes = [node1, node2, node3] 90 network_switches = [sw1, sw2, sw3] 91 start_all() 92 93 for n in network_nodes + network_switches: 94 n.wait_for_unit("systemd-networkd-wait-online.service") 95 96 node1.succeed("ping 10.0.0.2 -w 10 -c 1") 97 node1.succeed("ping 10.0.0.3 -w 10 -c 1") 98 node2.succeed("ping 10.0.0.1 -w 10 -c 1") 99 node2.succeed("ping 10.0.0.3 -w 10 -c 1") 100 node3.succeed("ping 10.0.0.1 -w 10 -c 1") 101 node3.succeed("ping 10.0.0.2 -w 10 -c 1") 102 ''; 103})