"auto-boot?",
"petitboot,network",
"petitboot,timeout",
- "petitboot,bootdev",
"petitboot,bootdevs",
"petitboot,language",
"petitboot,debug?",
"petitboot,write?",
"petitboot,snapshots?",
- "petitboot,tty",
+ "petitboot,console",
+ "petitboot,http_proxy",
+ "petitboot,https_proxy",
NULL,
};
#define to_platform_powerpc(p) \
(struct platform_powerpc *)(p->platform_data)
-/* a partition max a max size of 64k * 16bytes = 1M */
-static const int max_partition_size = 64 * 1024 * 16;
-
static bool param_is_known(const char *param, unsigned int len)
{
const char *known_param;
if (!strncmp(*pos, "uuid:", strlen("uuid:"))) {
prefix = strlen("uuid:");
opt->boot_type = BOOT_DEVICE_UUID;
- rc = 0;
} else if (!strncmp(*pos, "mac:", strlen("mac:"))) {
prefix = strlen("mac:");
opt->boot_type = BOOT_DEVICE_UUID;
- rc = 0;
} else {
type = find_device_type(*pos);
if (type != DEVICE_TYPE_UNKNOWN) {
if (delim)
len = (int)(delim - *pos) - prefix;
else
- len = strlen(*pos);
+ len = strlen(*pos) - prefix;
- opt->uuid = talloc_strndup(ctx, *pos + prefix, len);
+ if (len) {
+ opt->uuid = talloc_strndup(ctx, *pos + prefix, len);
+ rc = 0;
+ }
}
/* Always advance pointer to next option or end */
struct config *config)
{
struct autoboot_option *opt, *new = NULL;
- char *pos, *end, *old_dev = NULL;
+ char *pos, *end;
unsigned int n_new = 0;
const char *val;
- bool conflict;
-
- /* Check for old-style bootdev */
- val = get_param(platform, "petitboot,bootdev");
- if (val && strlen(val)) {
- pos = talloc_strdup(config, val);
- if (!strncmp(val, "uuid:", strlen("uuid:")))
- old_dev = talloc_strdup(config,
- val + strlen("uuid:"));
- else if (!strncmp(val, "mac:", strlen("mac:")))
- old_dev = talloc_strdup(config,
- val + strlen("mac:"));
- }
/* Check for ordered bootdevs */
val = get_param(platform, "petitboot,bootdevs");
}
- if (!n_new && !old_dev) {
+ if (!n_new) {
/* If autoboot has been disabled, clear the default options */
if (!config->autoboot_enabled) {
talloc_free(config->autoboot_opts);
return;
}
- conflict = old_dev && (!n_new ||
- new[0].boot_type == BOOT_DEVICE_TYPE ||
- /* Canonical UUIDs are 36 characters long */
- strncmp(new[0].uuid, old_dev, 36));
+ talloc_free(config->autoboot_opts);
+ config->autoboot_opts = new;
+ config->n_autoboot_opts = n_new;
+}
- if (!conflict) {
- talloc_free(config->autoboot_opts);
- config->autoboot_opts = new;
- config->n_autoboot_opts = n_new;
- return;
- }
+static void set_proxy_variables(struct config *config)
+{
+ if (config->http_proxy)
+ setenv("http_proxy", config->http_proxy, 1);
+ else
+ unsetenv("http_proxy");
- /*
- * Difference detected, defer to old format in case it has been updated
- * recently
- */
- pb_debug("Old autoboot bootdev detected\n");
- talloc_free(config->autoboot_opts);
- config->autoboot_opts = talloc(config, struct autoboot_option);
- config->autoboot_opts[0].boot_type = BOOT_DEVICE_UUID;
- config->autoboot_opts[0].uuid = talloc_strdup(config, old_dev);
- config->n_autoboot_opts = 1;
+ if (config->https_proxy)
+ setenv("https_proxy", config->https_proxy, 1);
+ else
+ unsetenv("https_proxy");
}
static void populate_config(struct platform_powerpc *platform,
if (val)
config->disable_snapshots = !strcmp(val, "false");
- val = get_param(platform, "petitboot,tty");
+ val = get_param(platform, "petitboot,console");
if (val)
config->boot_console = talloc_strdup(config, val);
+ /* If a full path is already set we don't want to override it */
+ config->manual_console = config->boot_console &&
+ !strchr(config->boot_console, '[');
+
+ val = get_param(platform, "petitboot,http_proxy");
+ if (val)
+ config->http_proxy = talloc_strdup(config, val);
+ val = get_param(platform, "petitboot,https_proxy");
+ if (val)
+ config->https_proxy = talloc_strdup(config, val);
+ set_proxy_variables(config);
}
static char *iface_config_str(void *ctx, struct interface_config *config)
static void update_bootdev_config(struct platform_powerpc *platform,
struct config *config)
{
- char *val = NULL, *boot_str = NULL, *tmp = NULL, *first = NULL;
+ char *val = NULL, *boot_str = NULL, *tmp = NULL;
struct autoboot_option *opt;
const char delim = ' ';
unsigned int i;
if (!config->n_autoboot_opts)
- first = val = "";
- else if (config->autoboot_opts[0].boot_type == BOOT_DEVICE_UUID)
- first = talloc_asprintf(config, "uuid:%s",
- config->autoboot_opts[0].uuid);
- else
- first = "";
+ val = "";
for (i = 0; i < config->n_autoboot_opts; i++) {
opt = &config->autoboot_opts[i];
}
update_string_config(platform, "petitboot,bootdevs", val);
- update_string_config(platform, "petitboot,bootdev", first);
talloc_free(tmp);
if (boot_str)
talloc_free(boot_str);
val = config->allow_writes ? "true" : "false";
update_string_config(platform, "petitboot,write?", val);
- val = config->boot_console ?: "";
- update_string_config(platform, "petitboot,tty", val);
+ if (!config->manual_console) {
+ val = config->boot_console ?: "";
+ update_string_config(platform, "petitboot,console", val);
+ }
+
+ val = config->http_proxy ?: "";
+ update_string_config(platform, "petitboot,http_proxy", val);
+ val = config->https_proxy ?: "";
+ update_string_config(platform, "petitboot,https_proxy", val);
+ set_proxy_variables(config);
update_network_config(platform, config);