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