diff --git a/man/systemd.network.xml b/man/systemd.network.xml
index 7dc447d0a7..b587573a5f 100644
--- a/man/systemd.network.xml
+++ b/man/systemd.network.xml
@@ -662,6 +662,9 @@ Table=1234
number of dynamically created network interfaces with the same network configuration and
automatic address range assignment.
+ If an empty string is specified, then the all previous assignments in both [Network] and
+ [Address] sections are cleared.
+
diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c
index e3bdc66c58..ad49793a16 100644
--- a/src/network/networkd-address.c
+++ b/src/network/networkd-address.c
@@ -1994,10 +1994,16 @@ int config_parse_address(
assert(rvalue);
assert(data);
- if (streq(section, "Network"))
+ if (streq(section, "Network")) {
+ if (isempty(rvalue)) {
+ /* If an empty string specified in [Network] section, clear previously assigned addresses. */
+ network->addresses_by_section = ordered_hashmap_free_with_destructor(network->addresses_by_section, address_free);
+ return 0;
+ }
+
/* we are not in an Address section, so use line number instead. */
r = address_new_static(network, filename, line, &n);
- else
+ } else
r = address_new_static(network, filename, section_line, &n);
if (r == -ENOMEM)
return log_oom();