+ screen->widgets.iface_l = widget_new_label(set, 0, 0, _("Device:"));
+ screen->widgets.iface_f = widget_new_select(set, 0, 0, 50);
+
+ for (i = 0; i < sysinfo->n_interfaces; i++) {
+ struct interface_info *info = sysinfo->interfaces[i];
+ char str[50], mac[20];
+ bool is_default;
+
+ is_default = ifcfg && !memcmp(ifcfg->hwaddr, info->hwaddr,
+ sizeof(ifcfg->hwaddr));
+
+ mac_str(info->hwaddr, info->hwaddr_size, mac, sizeof(mac));
+ snprintf(str, sizeof(str), "%s [%s, %s]", info->name, mac,
+ info->link ? _("link up") : _("link down"));
+
+ widget_select_add_option(screen->widgets.iface_f,
+ i, str, is_default);
+ }
+
+ url = gw = ip = mask = NULL;
+ if (ifcfg && ifcfg->method == CONFIG_METHOD_STATIC) {
+ char *sep;
+
+ str = talloc_strdup(screen, ifcfg->static_config.address);
+ sep = strchr(str, '/');
+ ip = str;
+
+ if (sep) {
+ *sep = '\0';
+ mask = sep + 1;
+ }
+ gw = ifcfg->static_config.gateway;
+ url = ifcfg->static_config.url;
+ }
+
+ screen->widgets.ip_addr_l = widget_new_label(set, 0, 0, _("IP/mask:"));
+ screen->widgets.ip_addr_f = widget_new_textbox(set, 0, 0, 16, ip);
+ screen->widgets.ip_mask_l = widget_new_label(set, 0, 0, "/");
+ screen->widgets.ip_mask_f = widget_new_textbox(set, 0, 0, 3, mask);
+ screen->widgets.ip_addr_mask_help_l =
+ widget_new_label(set, 0, 0, _("(eg. 192.168.0.10 / 24)"));
+
+ widget_textbox_set_fixed_size(screen->widgets.ip_addr_f);
+ widget_textbox_set_fixed_size(screen->widgets.ip_mask_f);
+ widget_textbox_set_validator_ipv4(screen->widgets.ip_addr_f);
+ widget_textbox_set_validator_integer(screen->widgets.ip_mask_f, 1, 31);
+
+ screen->widgets.gateway_l = widget_new_label(set, 0, 0, _("Gateway:"));
+ screen->widgets.gateway_f = widget_new_textbox(set, 0, 0, 16, gw);
+ screen->widgets.gateway_help_l =
+ widget_new_label(set, 0, 0, _("(eg. 192.168.0.1)"));
+
+ widget_textbox_set_fixed_size(screen->widgets.gateway_f);
+ widget_textbox_set_validator_ipv4(screen->widgets.gateway_f);
+
+ screen->widgets.url_l = widget_new_label(set, 0, 0, _("URL:"));
+ screen->widgets.url_f = widget_new_textbox(set, 0, 0, 32, url);
+ screen->widgets.url_help_l =
+ widget_new_label(set, 0, 0, _("(eg. tftp://)"));
+
+ str = talloc_strdup(screen, "");
+ for (i = 0; i < config->network.n_dns_servers; i++) {
+ str = talloc_asprintf_append(str, "%s%s",
+ (i == 0) ? "" : " ",
+ config->network.dns_servers[i]);
+ }
+
+ screen->widgets.dns_l = widget_new_label(set, 0, 0,
+ _("DNS Server(s):"));
+ screen->widgets.dns_f = widget_new_textbox(set, 0, 0, 32, str);
+ screen->widgets.dns_help_l =
+ widget_new_label(set, 0, 0, _("(eg. 192.168.0.2)"));
+
+ widget_textbox_set_validator_ipv4_multi(screen->widgets.dns_f);
+
+ screen->widgets.dns_dhcp_help_l = widget_new_label(set, 0, 0,
+ _("(if not provided by DHCP server)"));
+
+ if (config->safe_mode)
+ screen->widgets.safe_mode = widget_new_label(set, 0, 0,
+ _("Selecting 'OK' will exit safe mode"));
+
+ screen->widgets.allow_write_l = widget_new_label(set, 0, 0,
+ _("Disk R/W:"));
+ screen->widgets.allow_write_f = widget_new_select(set, 0, 0,
+ COLS - screen->field_x - 1);
+
+ widget_select_add_option(screen->widgets.allow_write_f, 0,
+ _("Prevent all writes to disk"),
+ !config->allow_writes);
+
+ widget_select_add_option(screen->widgets.allow_write_f, 1,
+ _("Allow bootloader scripts to modify disks"),
+ config->allow_writes);
+
+ screen->widgets.ok_b = widget_new_button(set, 0, 0, 10, _("OK"),