diff --git a/src/network/networkd-conf.c b/src/network/networkd-conf.c index 0f7015eb25..a84b5ce18b 100644 --- a/src/network/networkd-conf.c +++ b/src/network/networkd-conf.c @@ -19,6 +19,7 @@ int manager_parse_config_file(Manager *m) { "Network\0" "DHCPv4\0" "DHCPv6\0" + "DHCPServer\0" "DHCP\0", config_item_perf_lookup, networkd_gperf_lookup, CONFIG_PARSE_WARN, diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index 34c81a0747..9b37000bff 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -350,7 +350,7 @@ DHCPServer.BootServerAddress, config_parse_in_addr_non_null, DHCPServer.BootServerName, config_parse_dns_name, 0, offsetof(Network, dhcp_server_boot_server_name) DHCPServer.BootFilename, config_parse_string, CONFIG_PARSE_STRING_SAFE_AND_ASCII, offsetof(Network, dhcp_server_boot_filename) DHCPServer.RapidCommit, config_parse_bool, 0, offsetof(Network, dhcp_server_rapid_commit) -SHCPServer.PersistLeases, config_parse_tristate, 0, offsetof(Network, dhcp_server_persist_leases) +DHCPServer.PersistLeases, config_parse_tristate, 0, offsetof(Network, dhcp_server_persist_leases) DHCPServerStaticLease.Address, config_parse_dhcp_static_lease_address, 0, 0 DHCPServerStaticLease.MACAddress, config_parse_dhcp_static_lease_hwaddr, 0, 0 Bridge.Cost, config_parse_uint32, 0, offsetof(Network, cost) diff --git a/test/test-network/conf/persist-leases-no.conf b/test/test-network/conf/persist-leases-no.conf new file mode 100644 index 0000000000..5025265153 --- /dev/null +++ b/test/test-network/conf/persist-leases-no.conf @@ -0,0 +1,3 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +[DHCPServer] +PersistLeases=no diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 866c548fbe..d3ee0e7c77 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -5721,11 +5721,7 @@ class NetworkdDHCPServerTests(unittest.TestCase, Utilities): def tearDown(self): tear_down_common() - def test_dhcp_server(self): - copy_network_unit('25-veth.netdev', '25-dhcp-client.network', '25-dhcp-server.network') - start_networkd() - self.wait_online('veth99:routable', 'veth-peer:routable') - + def check_dhcp_server(self, persist_leases=True): output = networkctl_status('veth99') print(output) self.assertRegex(output, r'Address: 192.168.5.[0-9]* \(DHCP4 via 192.168.5.1\)') @@ -5737,6 +5733,19 @@ class NetworkdDHCPServerTests(unittest.TestCase, Utilities): print(output) self.assertRegex(output, "Offered DHCP leases: 192.168.5.[0-9]*") + if persist_leases: + with open('/var/lib/systemd/network/dhcp-server-lease/veth-peer', encoding='utf-8') as f: + check_json(f.read()) + else: + self.assertFalse(os.path.exists('/var/lib/systemd/network/dhcp-server-lease/veth-peer')) + + def test_dhcp_server(self): + copy_network_unit('25-veth.netdev', '25-dhcp-client.network', '25-dhcp-server.network') + start_networkd() + self.wait_online('veth99:routable', 'veth-peer:routable') + + self.check_dhcp_server() + networkctl_reconfigure('veth-peer') self.wait_online('veth-peer:routable') @@ -5748,6 +5757,22 @@ class NetworkdDHCPServerTests(unittest.TestCase, Utilities): else: self.fail() + def test_dhcp_server_persist_leases_no(self): + copy_networkd_conf_dropin('persist-leases-no.conf') + copy_network_unit('25-veth.netdev', '25-dhcp-client.network', '25-dhcp-server.network') + start_networkd() + self.wait_online('veth99:routable', 'veth-peer:routable') + + self.check_dhcp_server(persist_leases=False) + + remove_networkd_conf_dropin('persist-leases-no.conf') + with open(os.path.join(network_unit_dir, '25-dhcp-server.network'), mode='a', encoding='utf-8') as f: + f.write('[DHCPServer]\nPersistLeases=no') + restart_networkd() + self.wait_online('veth99:routable', 'veth-peer:routable') + + self.check_dhcp_server(persist_leases=False) + def test_dhcp_server_null_server_address(self): copy_network_unit('25-veth.netdev', '25-dhcp-client.network', '25-dhcp-server-null-server-address.network') start_networkd()