at 25.11-pre 4.0 kB view raw
1# This test predominantly tests systemd-networkd DHCP server, by 2# setting up a DHCP server and client, and ensuring they are mutually 3# reachable via the DHCP allocated address. 4# Two DHCP servers are set up on bridge VLANs, testing to make sure that 5# bridge VLAN settings are correctly applied. 6# 7# br0 ----untagged---v 8# +---PVID 1+VLAN 2---[bridge]---PVID 2---eth1 9# vlan2 ---VLAN 2----^ 10import ./make-test-python.nix ( 11 { pkgs, ... }: 12 { 13 name = "systemd-networkd-dhcpserver"; 14 meta = with pkgs.lib.maintainers; { 15 maintainers = [ ]; 16 }; 17 nodes = { 18 router = 19 { config, pkgs, ... }: 20 { 21 virtualisation.vlans = [ 1 ]; 22 systemd.services.systemd-networkd.environment.SYSTEMD_LOG_LEVEL = "debug"; 23 networking = { 24 useNetworkd = true; 25 useDHCP = false; 26 firewall.enable = false; 27 }; 28 systemd.network = { 29 netdevs = { 30 br0 = { 31 enable = true; 32 netdevConfig = { 33 Name = "br0"; 34 Kind = "bridge"; 35 }; 36 extraConfig = '' 37 [Bridge] 38 VLANFiltering=yes 39 DefaultPVID=none 40 ''; 41 }; 42 vlan2 = { 43 enable = true; 44 netdevConfig = { 45 Name = "vlan2"; 46 Kind = "vlan"; 47 }; 48 vlanConfig.Id = 2; 49 }; 50 }; 51 networks = { 52 # systemd-networkd will load the first network unit file 53 # that matches, ordered lexiographically by filename. 54 # /etc/systemd/network/{40-eth1,99-main}.network already 55 # exists. This network unit must be loaded for the test, 56 # however, hence why this network is named such. 57 "01-eth1" = { 58 name = "eth1"; 59 networkConfig.Bridge = "br0"; 60 bridgeVLANs = [ 61 { 62 PVID = 2; 63 EgressUntagged = 2; 64 } 65 ]; 66 }; 67 "02-br0" = { 68 name = "br0"; 69 networkConfig = { 70 DHCPServer = true; 71 Address = "10.0.0.1/24"; 72 VLAN = [ "vlan2" ]; 73 }; 74 dhcpServerConfig = { 75 PoolOffset = 100; 76 PoolSize = 1; 77 }; 78 bridgeVLANs = [ 79 { 80 PVID = 1; 81 EgressUntagged = 1; 82 } 83 { VLAN = 2; } 84 ]; 85 }; 86 "02-vlan2" = { 87 name = "vlan2"; 88 networkConfig = { 89 DHCPServer = true; 90 Address = "10.0.2.1/24"; 91 }; 92 dhcpServerConfig = { 93 PoolOffset = 100; 94 PoolSize = 1; 95 }; 96 }; 97 }; 98 }; 99 }; 100 101 client = 102 { config, pkgs, ... }: 103 { 104 virtualisation.vlans = [ 1 ]; 105 systemd.services.systemd-networkd.environment.SYSTEMD_LOG_LEVEL = "debug"; 106 networking = { 107 useNetworkd = true; 108 useDHCP = false; 109 firewall.enable = false; 110 interfaces.eth1.useDHCP = true; 111 }; 112 }; 113 }; 114 testScript = 115 { ... }: 116 '' 117 start_all() 118 119 router.systemctl("start network-online.target") 120 client.systemctl("start network-online.target") 121 router.wait_for_unit("systemd-networkd-wait-online.service") 122 client.wait_for_unit("systemd-networkd-wait-online.service") 123 client.wait_until_succeeds("ping -c 5 10.0.2.1") 124 router.wait_until_succeeds("ping -c 5 10.0.2.100") 125 ''; 126 } 127)