summaryrefslogtreecommitdiffstats
path: root/discover/device-handler.c
diff options
context:
space:
mode:
Diffstat (limited to 'discover/device-handler.c')
-rw-r--r--discover/device-handler.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/discover/device-handler.c b/discover/device-handler.c
index 5b7c02e..e991662 100644
--- a/discover/device-handler.c
+++ b/discover/device-handler.c
@@ -32,6 +32,7 @@ struct device_handler {
struct waitset *waitset;
struct waiter *timeout_waiter;
+ bool default_enabled;
unsigned int sec_to_boot;
struct discover_boot_option *default_boot_option;
@@ -291,6 +292,7 @@ struct device_handler *device_handler_init(struct discover_server *server,
handler->waitset = waitset;
handler->dry_run = dry_run;
handler->default_boot_option = NULL;
+ handler->default_enabled = true;
list_init(&handler->unresolved_boot_options);
/* set up our mount point base */
@@ -434,6 +436,9 @@ static void set_default(struct device_handler *handler,
if (handler->default_boot_option)
return;
+ if (!handler->default_enabled)
+ return;
+
handler->default_boot_option = opt;
handler->sec_to_boot = DEFAULT_BOOT_TIMEOUT_SEC;
default_timeout(handler);
@@ -800,4 +805,28 @@ void device_handler_boot(struct device_handler *handler,
boot(handler, opt, cmd, handler->dry_run, boot_status, handler);
}
+
+void device_handler_cancel_default(struct device_handler *handler)
+{
+ struct boot_status status;
+
+ if (handler->timeout_waiter)
+ waiter_remove(handler->timeout_waiter);
+
+ handler->timeout_waiter = NULL;
+ handler->default_enabled = false;
+
+ /* we only send status if we had a default boot option queued */
+ if (!handler->default_boot_option)
+ return;
+
+ handler->default_boot_option = NULL;
+
+ status.type = BOOT_STATUS_INFO;
+ status.progress = -1;
+ status.detail = NULL;
+ status.message = "Default boot cancelled";
+
+ discover_server_notify_boot_status(handler->server, &status);
+}
#endif
OpenPOWER on IntegriCloud