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:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user