If autoboot is enabled but later disabled or cancelled by, for example,
an IPMI override then the nc-config screen will set the autoboot widget
as disabled. If the user then makes and saves a change in nc-config,
autoboot will also be saved as disabled. This accidental change is
particularly awkward if the user is attempting to remove an IPMI
override.
Instead only ever change the autoboot setting if the user explicitly
changes it. Use a new helper function 'config_autoboot_active()' to
determine the current autoboot status where needed.
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
handler->server = server;
handler->waitset = waitset;
handler->dry_run = dry_run;
handler->server = server;
handler->waitset = waitset;
handler->dry_run = dry_run;
- handler->autoboot_enabled = config_get()->autoboot_enabled;
+ handler->autoboot_enabled = config_autoboot_active(config_get());
list_init(&handler->unresolved_boot_options);
list_init(&handler->unresolved_boot_options);
config->ipmi_bootdev = bootdev;
config->ipmi_bootdev_persistent = persistent;
config->ipmi_bootdev = bootdev;
config->ipmi_bootdev_persistent = persistent;
- switch (bootdev) {
- case IPMI_BOOTDEV_NONE:
- case IPMI_BOOTDEV_DISK:
- case IPMI_BOOTDEV_NETWORK:
- case IPMI_BOOTDEV_CDROM:
- default:
- break;
- case IPMI_BOOTDEV_SETUP:
- config->autoboot_enabled = false;
- break;
- case IPMI_BOOTDEV_SAFE:
- config->autoboot_enabled = false;
+ if (bootdev == IPMI_BOOTDEV_SAFE)
config->safe_mode = true;
config->safe_mode = true;
}
static int read_bootdev_sysparam(const char *name, uint8_t *val)
}
static int read_bootdev_sysparam(const char *name, uint8_t *val)
return DEVICE_TYPE_UNKNOWN;
}
return DEVICE_TYPE_UNKNOWN;
}
+
+bool config_autoboot_active(const struct config *config)
+{
+ enum ipmi_bootdev bootdev = config->ipmi_bootdev;
+
+ if (!config->autoboot_enabled)
+ return false;
+ if (bootdev == IPMI_BOOTDEV_SETUP || bootdev == IPMI_BOOTDEV_SAFE)
+ return false;
+
+ return true;
+}
+bool config_autoboot_active(const struct config *config);
+