1import ./make-test-python.nix ({ pkgs, lib, ...}: {
2 meta.maintainers = with lib.maintainers; [ hexa ];
3
4 nodes = {
5 router = { config, pkgs, ... }: {
6 virtualisation.vlans = [ 1 ];
7
8 networking = {
9 useNetworkd = true;
10 useDHCP = false;
11 firewall.allowedUDPPorts = [ 67 ];
12 };
13
14 systemd.network = {
15 networks = {
16 "01-eth1" = {
17 name = "eth1";
18 networkConfig = {
19 Address = "10.0.0.1/30";
20 };
21 };
22 };
23 };
24
25 services.kea.dhcp4 = {
26 enable = true;
27 settings = {
28 valid-lifetime = 3600;
29 renew-timer = 900;
30 rebind-timer = 1800;
31
32 lease-database = {
33 type = "memfile";
34 persist = true;
35 name = "/var/lib/kea/dhcp4.leases";
36 };
37
38 interfaces-config = {
39 dhcp-socket-type = "raw";
40 interfaces = [
41 "eth1"
42 ];
43 };
44
45 subnet4 = [ {
46 subnet = "10.0.0.0/30";
47 pools = [ {
48 pool = "10.0.0.2 - 10.0.0.2";
49 } ];
50 } ];
51 };
52 };
53 };
54
55 client = { config, pkgs, ... }: {
56 virtualisation.vlans = [ 1 ];
57 systemd.services.systemd-networkd.environment.SYSTEMD_LOG_LEVEL = "debug";
58 networking = {
59 useNetworkd = true;
60 useDHCP = false;
61 firewall.enable = false;
62 interfaces.eth1.useDHCP = true;
63 };
64 };
65 };
66 testScript = { ... }: ''
67 start_all()
68 router.wait_for_unit("kea-dhcp4-server.service")
69 client.wait_for_unit("systemd-networkd-wait-online.service")
70 client.wait_until_succeeds("ping -c 5 10.0.0.1")
71 router.wait_until_succeeds("ping -c 5 10.0.0.2")
72 '';
73})