diff options
-rw-r--r-- | discover/pxe-parser.c | 19 | ||||
-rw-r--r-- | lib/pb-protocol/pb-protocol.c | 13 | ||||
-rw-r--r-- | lib/types/types.h | 5 |
3 files changed, 32 insertions, 5 deletions
diff --git a/discover/pxe-parser.c b/discover/pxe-parser.c index ff86722..aef43b8 100644 --- a/discover/pxe-parser.c +++ b/discover/pxe-parser.c @@ -148,7 +148,7 @@ static void pxe_process_pair(struct conf_context *ctx, return; } - if (streq(name, "LABEL")) { + if (streq(name, "LABEL") || streq(name, "PLUGIN")) { if (opt) pxe_finish(ctx); @@ -158,8 +158,12 @@ static void pxe_process_pair(struct conf_context *ctx, opt->option->id = talloc_asprintf(opt, "%s@%p", ctx->dc->device->device->id, opt); - opt->option->is_default = parser_info->default_name && - streq(parser_info->default_name, value); + if (streq(name, "LABEL")) { + opt->option->type = DISCOVER_BOOT_OPTION; + opt->option->is_default = parser_info->default_name && + streq(parser_info->default_name, value); + } else + opt->option->type = DISCOVER_PLUGIN_OPTION; parser_info->opt = opt; return; @@ -169,6 +173,14 @@ static void pxe_process_pair(struct conf_context *ctx, if (!opt) return; + if (streq(name, "TARBALL") && + opt->option->type == DISCOVER_PLUGIN_OPTION) { + url = pxe_url_join(ctx->dc, ctx->dc->conf_url, value); + opt->boot_image = create_url_resource(opt, url); + /* All other options apply to boot options only */ + return; + } + if (streq(name, "KERNEL")) { url = pxe_url_join(ctx->dc, ctx->dc->conf_url, value); opt->boot_image = create_url_resource(opt, url); @@ -210,7 +222,6 @@ static void pxe_process_pair(struct conf_context *ctx, url = pxe_url_join(ctx->dc, ctx->dc->conf_url, value); opt->dtb = create_url_resource(opt, url); } - } static void pxe_load_next_filename(struct conf_context *conf) diff --git a/lib/pb-protocol/pb-protocol.c b/lib/pb-protocol/pb-protocol.c index ed61fe1..dbbda40 100644 --- a/lib/pb-protocol/pb-protocol.c +++ b/lib/pb-protocol/pb-protocol.c @@ -75,6 +75,8 @@ void pb_protocol_dump_device(const struct device *dev, const char *text, fprintf(stream, "%s\t\tdtb: %s\n", text, opt->dtb_file); fprintf(stream, "%s\t\targs: %s\n", text, opt->boot_args); fprintf(stream, "%s\t\tasig: %s\n", text, opt->args_sig_file); + fprintf(stream, "%s\t\ttype: %s\n", text, + opt->type == DISCOVER_BOOT_OPTION ? "boot" : "plugin"); } } @@ -201,7 +203,8 @@ int pb_protocol_boot_option_len(const struct boot_option *opt) 4 + optional_strlen(opt->dtb_file) + 4 + optional_strlen(opt->boot_args) + 4 + optional_strlen(opt->args_sig_file) + - sizeof(opt->is_default); + sizeof(opt->is_default) + + sizeof(opt->type); } int pb_protocol_boot_len(const struct boot_command *boot) @@ -397,6 +400,9 @@ int pb_protocol_serialise_boot_option(const struct boot_option *opt, *(bool *)pos = opt->is_default; pos += sizeof(bool); + *(uint32_t *)pos = __cpu_to_be32(opt->type); + pos += 4; + assert(pos <= buf + buf_len); (void)buf_len; @@ -825,6 +831,11 @@ int pb_protocol_deserialise_boot_option(struct boot_option *opt, if (len < sizeof(bool)) goto out; opt->is_default = *(bool *)(pos); + pos += sizeof(bool); + len -= sizeof(bool); + + if (read_u32(&pos, &len, &opt->type)) + return -1; rc = 0; diff --git a/lib/types/types.h b/lib/types/types.h index 36841cd..9ab2a43 100644 --- a/lib/types/types.h +++ b/lib/types/types.h @@ -58,6 +58,11 @@ struct boot_option { struct list_item list; void *ui_info; + + enum { + DISCOVER_BOOT_OPTION, + DISCOVER_PLUGIN_OPTION, + } type; }; struct plugin_option { |