summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Mendoza-Jonas <sam@mendozajonas.com>2016-06-08 14:11:10 +1000
committerSamuel Mendoza-Jonas <sam@mendozajonas.com>2016-06-29 14:19:08 +1000
commitd8d5dac0fcd80276b71184060e771804fb67d7c9 (patch)
tree7ff4f159fefda581ca11e3afee5c90998dc4e038
parentec82dfa6207090d285c4617e1d0a7a2284e390c3 (diff)
downloadtalos-petitboot-d8d5dac0fcd80276b71184060e771804fb67d7c9.tar.gz
talos-petitboot-d8d5dac0fcd80276b71184060e771804fb67d7c9.zip
ui/ncurses: List available consoles in nc-config
Include a list of available consoles as specified by the discover server in nc-config from which the user can select a default. The selected console specifies the which console to be set as the primary console when a kernel is kexec'd. Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
-rw-r--r--ui/ncurses/nc-config.c56
1 files changed, 53 insertions, 3 deletions
diff --git a/ui/ncurses/nc-config.c b/ui/ncurses/nc-config.c
index 66ca7a4..24aac2b 100644
--- a/ui/ncurses/nc-config.c
+++ b/ui/ncurses/nc-config.c
@@ -33,7 +33,7 @@
#include "nc-config.h"
#include "nc-widgets.h"
-#define N_FIELDS 39
+#define N_FIELDS 42
extern struct help_text config_help_text;
@@ -108,6 +108,9 @@ struct config_screen {
struct nc_widget_label *allow_write_l;
struct nc_widget_select *allow_write_f;
+ struct nc_widget_label *boot_tty_l;
+ struct nc_widget_select *boot_tty_f;
+ struct nc_widget_label *current_tty_l;
struct nc_widget_label *safe_mode;
struct nc_widget_button *ok_b;
@@ -197,7 +200,7 @@ static int screen_process_form(struct config_screen *screen)
char *str, *end;
struct config *config;
int i, n_boot_opts, rc, idx;
- unsigned int *order;
+ unsigned int *order, tty;
char mac[20];
config = config_copy(screen, screen->cui->config);
@@ -333,6 +336,19 @@ static int screen_process_form(struct config_screen *screen)
if (allow_write != config->allow_writes)
config->allow_writes = allow_write;
+ if (config->n_tty) {
+ tty = widget_select_get_value(screen->widgets.boot_tty_f);
+ if (!config->boot_tty) {
+ config->boot_tty = talloc_strdup(config,
+ config->tty_list[tty]);
+ } else if (strncmp(config->boot_tty, config->tty_list[tty],
+ strlen(config->boot_tty)) != 0) {
+ talloc_free(config->boot_tty);
+ config->boot_tty = talloc_strdup(config,
+ config->tty_list[tty]);
+ }
+ }
+
config->safe_mode = false;
rc = cui_send_config(screen->cui, config);
talloc_free(config);
@@ -579,6 +595,22 @@ static void config_screen_layout_widgets(struct config_screen *screen)
y += 1;
+ if (widget_height(widget_select_base(screen->widgets.boot_tty_f))) {
+ layout_pair(screen, y, screen->widgets.boot_tty_l,
+ widget_select_base(screen->widgets.boot_tty_f));
+ y += widget_height(widget_select_base(screen->widgets.boot_tty_f));
+ widget_move(widget_label_base(screen->widgets.current_tty_l),
+ y, screen->field_x);
+ y += 2;
+ } else {
+ widget_set_visible(widget_label_base(
+ screen->widgets.boot_tty_l), false);
+ widget_set_visible(widget_select_base(
+ screen->widgets.boot_tty_f), false);
+ widget_set_visible(widget_label_base(
+ screen->widgets.current_tty_l), false);
+ }
+
widget_move(widget_button_base(screen->widgets.ok_b),
y, screen->field_x);
widget_move(widget_button_base(screen->widgets.help_b),
@@ -740,10 +772,11 @@ static void config_screen_setup_widgets(struct config_screen *screen,
{
struct nc_widgetset *set = screen->widgetset;
struct interface_config *ifcfg;
- char *str, *ip, *mask, *gw, *url;
+ char *str, *ip, *mask, *gw, *url, *tty;
enum net_conf_type type;
unsigned int i;
int add_len, clear_len, any_len, min_len = 20;
+ bool found;
build_assert(sizeof(screen->widgets) / sizeof(struct widget *)
== N_FIELDS);
@@ -986,6 +1019,23 @@ static void config_screen_setup_widgets(struct config_screen *screen,
_("Allow bootloader scripts to modify disks"),
config->allow_writes);
+ screen->widgets.boot_tty_l = widget_new_label(set, 0, 0,
+ _("Default tty:"));
+ screen->widgets.boot_tty_f = widget_new_select(set, 0, 0,
+ COLS - screen->field_x - 1);
+
+ for (i = 0; i < config->n_tty; i++){
+ found = config->boot_tty &&
+ strncmp(config->boot_tty, config->tty_list[i],
+ strlen(config->boot_tty)) == 0;
+ widget_select_add_option(screen->widgets.boot_tty_f, i,
+ config->tty_list[i], found);
+ }
+
+ tty = talloc_asprintf(screen, _("Current interface: %s"),
+ ttyname(STDIN_FILENO));
+ screen->widgets.current_tty_l = widget_new_label(set, 0 , 0, tty);
+
screen->widgets.ok_b = widget_new_button(set, 0, 0, 10, _("OK"),
ok_click, screen);
screen->widgets.help_b = widget_new_button(set, 0, 0, 10, _("Help"),
OpenPOWER on IntegriCloud