diff options
author | Neelesh Gupta <neelegup@linux.vnet.ibm.com> | 2013-10-28 12:45:21 +0530 |
---|---|---|
committer | Jeremy Kerr <jk@ozlabs.org> | 2013-11-06 16:34:26 +0800 |
commit | b8e53cb4b96eb17dc7fa0ffc505dfebae37e6cbf (patch) | |
tree | 2049ee274a9a7872366da8b95dbecaffc215df3a /discover/kboot-parser.c | |
parent | f385e8cacbc574e213b0805a8d383373f29a8058 (diff) | |
download | talos-petitboot-b8e53cb4b96eb17dc7fa0ffc505dfebae37e6cbf.tar.gz talos-petitboot-b8e53cb4b96eb17dc7fa0ffc505dfebae37e6cbf.zip |
discover: Change parsers to explicitly request configuration files
Add a new function parser_request_url() to read the data from
configuration files present remotely. We deprecate
iterate_parser_files() and download_config() functions along with the
'filenames' and 'method' members of the 'parser' structure so that
individual parsers would now require to request the configuration files
data from the parser code and doesn't necessarily export the list of
configuration files.
Add the support to handle incoming DHCP event, done by passing all the
relevant environment variables of the udhcpc to the discover code.
Also, update the pxe parser code to populate the list of configuration
file names as per PXELINUX convention of fallback names using mac and ip
addresses of the booting machine.
Signed-off-by: Neelesh Gupta <neelegup@linux.vnet.ibm.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'discover/kboot-parser.c')
-rw-r--r-- | discover/kboot-parser.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/discover/kboot-parser.c b/discover/kboot-parser.c index 9d0322d..8572674 100644 --- a/discover/kboot-parser.c +++ b/discover/kboot-parser.c @@ -151,33 +151,45 @@ static const char *const kboot_ignored_names[] = { NULL }; -static int kboot_parse(struct discover_context *dc, char *buf, int len) +static int kboot_parse(struct discover_context *dc) { struct conf_context *conf; + const char * const *filename; + char *buf; + int len, rc; + + /* Support block device boot only at present */ + if (dc->event) + return -1; conf = talloc_zero(dc, struct conf_context); if (!conf) - return 0; + return -1; conf->dc = dc; conf->global_options = kboot_global_options, conf_init_global_options(conf); conf->get_pair = conf_get_pair_equal; conf->process_pair = kboot_process_pair; - conf->parser_info = (void *)kboot_ignored_names, + conf->parser_info = (void *)kboot_ignored_names; + + for (filename = kboot_conf_files; *filename; filename++) { + rc = parser_request_file(dc, dc->device, *filename, &buf, &len); + if (rc) + continue; - conf_parse_buf(conf, buf, len); + conf_parse_buf(conf, buf, len); + talloc_free(buf); + } talloc_free(conf); - return 1; + return 0; } static struct parser kboot_parser = { .name = "kboot", - .method = CONF_METHOD_LOCAL_FILE, .parse = kboot_parse, - .filenames = kboot_conf_files, .resolve_resource = resolve_devpath_resource, }; |