summaryrefslogtreecommitdiffstats
path: root/common/blspec.c
diff options
context:
space:
mode:
authorAndreas Schmidt <mail@schmidt-andreas.de>2018-05-02 15:23:56 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2018-05-08 08:10:33 +0200
commit70013eb56ddaacb518aeb4d7d35f627c5387d557 (patch)
tree2830724aa546dcdb4b377ceb7adaad32d25a5988 /common/blspec.c
parentd472b8670b4847875a6b5bcce1118b96cb725d7d (diff)
downloadbarebox-70013eb56ddaacb518aeb4d7d35f627c5387d557.tar.gz
blspec: add checking of optional key machine-id
For filtering of Bootloader Spec entries, Bootloader Spec specify an optional key machine-id. By set the global.boot.machine-id variable the checking of machine-id key in Bootloader Spec entries will be activate. If the variable and key match, appropriate boot entry will be booting. If it not match boot entry will be ignore and barebox check the next boot entry. Signed-off-by: Andreas Schmidt <mail@schmidt-andreas.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'common/blspec.c')
-rw-r--r--common/blspec.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/common/blspec.c b/common/blspec.c
index 6171461..2c682e1 100644
--- a/common/blspec.c
+++ b/common/blspec.c
@@ -420,6 +420,30 @@ out:
}
/*
+ * entry_is_match_machine_id - check if a bootspec entry is match with
+ * the machine id given by global variable.
+ *
+ * returns true if the entry is match, false otherwise
+ */
+
+static bool entry_is_match_machine_id(struct blspec_entry *entry)
+{
+ int ret = true;
+ const char *env_machineid = getenv_nonempty("global.boot.machine_id");
+
+ if (env_machineid) {
+ const char *machineid = blspec_entry_var_get(entry, "machine-id");
+ if (!machineid || strcmp(machineid, env_machineid)) {
+ pr_debug("ignoring entry with missmatched machine-id " \
+ "\"%s\" != \"%s\"\n", env_machineid, machineid);
+ ret = false;
+ }
+ }
+
+ return ret;
+}
+
+/*
* blspec_scan_directory - scan over a directory
*
* Given a root path collects all bootentries entries found under /bootentries/entries/.
@@ -504,6 +528,11 @@ int blspec_scan_directory(struct bootentries *bootentries, const char *root)
continue;
}
+ if (!entry_is_match_machine_id(entry)) {
+ blspec_entry_free(&entry->entry);
+ continue;
+ }
+
found++;
if (entry->cdev && entry->cdev->dev) {
@@ -756,4 +785,4 @@ static int blspec_init(void)
{
return bootentry_register_provider(blspec_bootentry_provider);
}
-device_initcall(blspec_init); \ No newline at end of file
+device_initcall(blspec_init);