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.
4import ./make-test-python.nix ({pkgs, ...}: {
5 name = "systemd-networkd-dhcpserver";
6 meta = with pkgs.lib.maintainers; {
7 maintainers = [ tomfitzhenry ];
8 };
9 nodes = {
10 router = { config, pkgs, ... }: {
11 virtualisation.vlans = [ 1 ];
12 systemd.services.systemd-networkd.environment.SYSTEMD_LOG_LEVEL = "debug";
13 networking = {
14 useNetworkd = true;
15 useDHCP = false;
16 firewall.enable = false;
17 };
18 systemd.network = {
19 networks = {
20 # systemd-networkd will load the first network unit file
21 # that matches, ordered lexiographically by filename.
22 # /etc/systemd/network/{40-eth1,99-main}.network already
23 # exists. This network unit must be loaded for the test,
24 # however, hence why this network is named such.
25 "01-eth1" = {
26 name = "eth1";
27 networkConfig = {
28 DHCPServer = true;
29 Address = "10.0.0.1/24";
30 };
31 dhcpServerConfig = {
32 PoolOffset = 100;
33 PoolSize = 1;
34 };
35 };
36 };
37 };
38 };
39
40 client = { config, pkgs, ... }: {
41 virtualisation.vlans = [ 1 ];
42 systemd.services.systemd-networkd.environment.SYSTEMD_LOG_LEVEL = "debug";
43 networking = {
44 useNetworkd = true;
45 useDHCP = false;
46 firewall.enable = false;
47 interfaces.eth1.useDHCP = true;
48 };
49 };
50 };
51 testScript = { ... }: ''
52 start_all()
53 router.wait_for_unit("systemd-networkd-wait-online.service")
54 client.wait_for_unit("systemd-networkd-wait-online.service")
55 client.wait_until_succeeds("ping -c 5 10.0.0.1")
56 router.wait_until_succeeds("ping -c 5 10.0.0.100")
57 '';
58})