network: enable KeepConfiguration= when running on network filesystem

Also, set KeepConfiguration=dhcp-on-stop by default when running in
initrd.

Fixes #21967.
This commit is contained in:
Yu Watanabe
2022-02-05 09:42:32 +09:00
parent 4e247216e5
commit ea853de57d
5 changed files with 47 additions and 7 deletions
+29
View File
@@ -398,6 +398,30 @@ static int signal_restart_callback(sd_event_source *s, const struct signalfd_sig
return sd_event_exit(sd_event_source_get_event(s), 0);
}
static int manager_set_keep_configuration(Manager *m) {
int r;
assert(m);
if (in_initrd()) {
log_debug("Running in initrd, keep DHCPv4 addresses on stopping networkd by default.");
m->keep_configuration = KEEP_CONFIGURATION_DHCP_ON_STOP;
return 0;
}
r = path_is_network_fs("/");
if (r < 0)
return log_error_errno(r, "Failed to detect if root is network filesystem: %m");
if (r == 0) {
m->keep_configuration = _KEEP_CONFIGURATION_INVALID;
return 0;
}
log_debug("Running on network filesystem, enabling KeepConfiguration= by default.");
m->keep_configuration = KEEP_CONFIGURATION_YES;
return 0;
}
int manager_setup(Manager *m) {
int r;
@@ -453,6 +477,10 @@ int manager_setup(Manager *m) {
if (r < 0)
return r;
r = manager_set_keep_configuration(m);
if (r < 0)
return r;
m->state_file = strdup("/run/systemd/netif/state");
if (!m->state_file)
return -ENOMEM;
@@ -468,6 +496,7 @@ int manager_new(Manager **ret, bool test_mode) {
return -ENOMEM;
*m = (Manager) {
.keep_configuration = _KEEP_CONFIGURATION_INVALID,
.test_mode = test_mode,
.speed_meter_interval_usec = SPEED_METER_DEFAULT_TIME_INTERVAL,
.online_state = _LINK_ONLINE_STATE_INVALID,